如何根据列标签(包含典型字符)跨列求和?
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
来命名矩阵,因为它既是函数名称又可能是不同库的缩写
亲爱的 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
来命名矩阵,因为它既是函数名称又可能是不同库的缩写