r - 从元素列表到化学式

标签 r dataframe data-manipulation chemistry

我有一个元素组合列表,每个元素都在它自己的行中。有时这些元素有一个零。

   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/

相关文章:

r - httr 禁用 "Expect: 100-continue"

r - 合并列表的同一列表中的行

r - 使用列表 : Drop variables, 中的数据帧添加新的

r - 通过row.names子集矩阵

R ggplot2 : Unable to change y axis limits (zero_range error)

python - 当数据通过 rpy2 传递时,lmtest/lrtest 抛出 data.frame 错误

R:ggplot2 - 每个方面的 Kruskal-Wallis 测试

python - 从数据集中删除多行

r - 用因子列融化 R data.table

python - Pandas 通过滚动行创建新数据框