首页 > 解决方案 > 在设置初始条件时创建字符串时如何排除值?

问题描述

我正在尝试组合我的数据框中的列,以便它们给我一个特定的字符串。我将标题为“C”、“H”、“O”、“N”和“S”的列作为元素。在这些列中列出了该分子中元素的数量,但我想根据它们的值排除一些元素。例如,当没有氧气时,值为 0,所以我想在组合元素以创建字符串时排除它。

#This is a portion of my data frame titled data4a
C H O N S
3 4 0 0 1
7 5 4 1 0

#The code I have is 
data4a$NewComp = paste("C",data4a$Total.C,"H", data4a$NewH, "O", data4a$O, "N", data4a$N, "S", data4a$S, sep = "")

#This code gives me this
C H O N S NewComp
3 4 0 0 1 C3H4O0N0S1
7 5 4 1 0 C7H5O4N1S0

#I expect to see something like this when I print my results
C H O N S NewComp
3 4 0 0 1 C3H4S1
7 5 4 1 0 C7H5O4N

#I want values of zero to be excluded from the string created

标签: rstringif-statementconcatenation

解决方案


这是一个基本的 R 解决方案,它解决了问题问题并同时简化了分子向量的创建。

m <- matrix(paste0(names(data4a), t(as.matrix(data4a))),
       ncol = ncol(data4a), byrow = TRUE)
m <- apply(m, 1, paste, collapse = "")
data4a$NewComp <- gsub(".0", "", m)

data4a
#  C H O N S  NewComp
#1 3 4 0 0 1   C3H4S1
#2 7 5 4 1 0 C7H5O4N1

数据。

data4a <- read.table(text = "
C H O N S
3 4 0 0 1
7 5 4 1 0
", header = TRUE)

推荐阅读