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

How to sum across columns based on column label (containing a typical character)?

亲爱的 Stack Overflow 社区,

我是论坛新人,这是我的第一个 post。

我的问题如下:

我想对每行的列求和,列标签是否包含典型字符(在我的例子中,包含“完整”或“不完整”),并在相关列中报告这些总和“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)
  }
}

但是代码不起作用。

请问你能帮忙写下这段代码吗? 预先感谢您的帮助!

安东尼

您使用 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 来命名矩阵,因为它既是函数名称又可能是不同库的缩写