我有一个元素组合列表,每个元素都在它自己的行中。有时这些元素有一个零。
C H N O S
1 5 5 0 0 0
2 6 4 1 0 1
3 4 6 2 1 0
我需要将它们组合起来以便它们阅读,例如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
这样,我只需要输出是单个字符串,但我需要忽略任何零值,并删除元素名称后面的那个。
最佳答案
这里有一个基本的 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"
paste0(colnames(df)[x > 0], x[x > 0], collapse='')
将行值大于零的列名粘贴在一起。 gsub
然后删除那些。和 apply
对数据框中的每一行执行此操作。
关于r - 从元素列表到化学式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52873954/