如何根据列标签(包含典型字符)对列进行求和?

时间:2017-01-10 13:49:16

标签: r sum conditional labels conditional-operator

亲爱的Stack Overflow社区,

我是论坛上的新人,这是我的第一篇文章。

我的问题如下:

我想在每列中总结列标签是否包含典型字符(在我的情况下,包含“完整”或“不完整”)并在相关列中报告这些总和“sum_complete”和“ sum_incomplete”。

set.seed(1)
incomplete_x=1:10
incomplete_y=rnorm(10)
complete_x=runif(10)
complete_y=3:12
dt=cbind(incomplete_x,incomplete_y,complete_x,complete_y)

我希望dt[,5]dt[,6]分别包含:

  

0.3735462 2.1836433 2.1643714 5.5952808 5.3295078 5.1795316 7.4874291 8.7383247 9.5757814 9.6946116

     

3.934705 4.212143 5.651674 6.125555 7.267221 8.386114 9.013390 10.382388 11.869691 12.340349

我一直在做类似的事情(抱歉,不擅长编码...):

for (i in 1:ncol(dt)) {
  if (grepl("incomplete",colnames(dt)[i])==TRUE) {
    dt[,"sum_incomplete"] <- rowSums(dt)
  } else {
    dt[,"sum_complete"] <- rowSums(dt)
  }
}

但代码不起作用。

你能帮忙解决这个问题吗? 提前感谢您的帮助!

安东尼

1 个答案:

答案 0 :(得分:1)

您使用grep朝着正确的方向前进,但不需要for循环

dt <- cbind(dt, rowSums(dt[, grep("^incomplete", colnames(dt))]))
dt <- cbind(dt, rowSums(dt[, grep("^complete", colnames(dt))]))

colnames(dt)[5:6] <- c("sum_incomplete", "sum_complete")

作为附注,最好不要使用dt来命名矩阵,因为它既是函数名,也可能是不同库的缩写