【发布时间】:2015-09-01 11:48:09
【问题描述】:
这令人沮丧,因为感觉它应该如此简单,但它会占用几个小时。
我想获取数据框中列列表的行总和,但该列表(由用户设置)很可能是长度 1,即一个列号。
rowSums 不允许对 1 列求和。
rowsum 使用我发现完全无法破解的组。这个例子我玩了很久了,仍然不知道它是干什么用的,但不能省略。
最佳答案here 使用rowSums 或apply;第二个使用.SD和lapply,但使用了:=和.SD以及R帮助中没有出现的其他术语,我以前也没有见过,这只会打开另一个搜索和混淆的虫洞。
那么:有什么我可以用的吗:
x <- matrix(runif(100), ncol = 5)
goodcols <- c(1,3,5)
y <- rowSums(x[,goodcols])
这适用于 1 个或 >1 个 goodcols 吗?
提前致谢。目前我正在考虑使用:
ifelse(length(goodcols)>1,
y<-rowSums(x[,goodcols]),
y<-x[,goodcols])
【问题讨论】:
-
只要使用
drop=FALSE就可以避免x 在只有一列时变成向量。.SD和:=是来自包data.table的语法。最后一件事,用y <- rowSums(x[,goodcols])代替y <- rowSums[,goodcols],这样会更好;-)(所以你需要的是y <- rowSums(x[, goodcols, drop=F]))