从元素列表到化学式

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)

这样,我只需要输出为单个字符串,但我需要忽略任何零值,并删除元素名称后面的值.

bob*_*bel 5

这里有一个基础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这是为数据框中的每一行做的.