这令人沮丧,因为它感觉它应该如此简单,但它却在吸收数小时。
我想得到数据框中列的列的行和,但是该列表 - 由用户设置 - 很可能是长度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或&gt; 1个好词?
提前致谢。目前我正在使用:
ifelse(length(goodcols)>1,
y<-rowSums(x[,goodcols]),
y<-x[,goodcols])
答案 0 :(得分:4)
如果data.frame
,matrix
或array
中只剩下一列,则R会将其强制转换为vector
。要保留尺寸,您需要使用参数drop
Drop
已定义(正如您可以在help("[.data.frame")
中阅读):
逻辑。如果为TRUE,则将结果强制转换为可能的最低维度。如果只剩下一列,则默认为删除,但如果只剩下一行则不丢弃。
因此,在您的情况下,如果您希望rowSums
无论列数是多少,都需要使用以下代码:
y <- rowSums(x[, goodcols, drop = FALSE])