Har*_*arD 4 r data-manipulation chemistry dataframe
我有一个元素组合列表,每个元素都在它自己的行中.有时这些元素为零.
C H N O S
1 5 5 0 0 0
2 6 4 1 0 1
3 4 6 2 1 0
Run Code Online (Sandbox Code Playgroud)
我需要将它们组合起来以便它们读取,例如C5H5,C6H4NS,C4H6N2O.这意味着对于任何值为"1"的元素,我只应该使用列名,对于值为0的任何元素,应该完全跳过该列.
我不确定从哪里开始.我可以添加一个新列,以便更容易地读取列,例如
c C h H n N o O s S
1 C 5 H 5 N 0 O 0 S 0
2 C 6 H 4 N 1 O 0 S 1
3 C 4 H 6 N 2 O 1 S 0
Run Code Online (Sandbox Code Playgroud)
这样,我只需要输出为单个字符串,但我需要忽略任何零值,并删除元素名称后面的值.
这里有一个基础R解决方案:
df = read.table(text = "
C H N O S
5 5 0 0 0
6 4 1 0 1
4 6 2 1 0
", header=T)
apply(df, 1, function(x){return(gsub('1', '', paste0(colnames(df)[x > 0], x[x > 0], collapse='')))})
[1] "C5H5" "C6H4NS" "C4H6N2O"
Run Code Online (Sandbox Code Playgroud)
paste0(colnames(df)[x > 0], x[x > 0], collapse='')
将行值大于零的列名粘贴在一起.gsub
然后删除那些.并且apply
这是为数据框中的每一行做的.