亲爱的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)
}
}
但代码不起作用。
你能帮忙解决这个问题吗? 提前感谢您的帮助!
安东尼
答案 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
来命名矩阵,因为它既是函数名,也可能是不同库的缩写