r - 当条目本身的值为零且条目之前的条目为 0 时,跳过 Paste0 条目

标签 r string

我在使用 paste0 函数时遇到一个问题。我有一个数据框: 数据:

    C  C13 H O N
1   1   0  4 0 0
2   2   0  4 0 0
3   3   0  4 0 0
4   4   0  4 0 0
5   5   0  4 1 0
6   1   1  4 1 0
7   2   1  4 1 1

使用

data$formula = paste0("C", data$C, "C13", data$C13, "H", data$H, "O", data$O, "N",data$N) 

我得到了公式列

    C  C13 H O N       formula
1   1   0  4 0 0  C1C130H4O0N0
2   2   0  4 0 0  C2C130H4O0N0
3   3   0  4 0 0  C3C130H4O0N0
4   4   0  4 0 0  C4C130H4O0N0
5   5   0  4 1 0  C5C130H4O1N0
6   1   1  4 1 0  C1C131H4O1N0
7   2   1  4 1 1  C2C131H4O1N1

问题是我想要所有值为 0 的字符串,因此对于第 1 行我想要:C1H4 而不是 C1C130H4O0N0 等等。

我对 R 非常陌生,所以我尝试过

data$formula = paste0("C", data$C>0, "C13", data$C13>0, "H", data$H>0, "O", data$O>0, "N",data$N>0) 

但这只给我真实的错误输出......

有人可以帮我吗,或者知道如何解决这个问题?

非常感谢!

最佳答案

我想只需一次应用就足够了!

逻辑:首先我们使用 apply(df, 1, ...) 迭代每一行;然后我们使用 which 检查所有条目是否非零;获得索引后,只需对相应的列名和值进行子集

df$formula <- apply(df, 1, function(x){y = which(x!=0) 
                                       paste0(colnames(df)[y], x[y], collapse = "")})
# [1] "C1H4"         "C2H4"         "C3H4"         "C4H4"         "C5H4O1"       "C1C131H4O1"   "C2C131H4O1N1" 

> df
#  C C13 H O N      formula
#1 1   0 4 0 0         C1H4
#2 2   0 4 0 0         C2H4
#3 3   0 4 0 0         C3H4
#4 4   0 4 0 0         C4H4
#5 5   0 4 1 0       C5H4O1
#6 1   1 4 1 0   C1C131H4O1
#7 2   1 4 1 1 C2C131H4O1N1  

关于r - 当条目本身的值为零且条目之前的条目为 0 时,跳过 Paste0 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41771682/

相关文章:

javascript - 删除字符串中第四个斜杠“/”之后的所有字符

string - vb 宏字符串宽度(以像素为单位)

r - 如何在 R 中以矢量图形制作白色文本?

r - 从 R 列中的引用值中查找类别

python - 选择 pandas 数据框中的多列,列索引为序号

java - 字符串等于方法

r - R中的外/张量积

r - 比较r中四个ROC曲线的auc

c# - 是否可以阻止 Trim() 删除空格?

sql - SQL字符字段串联(不使用CONCAT()或+)