我有一个非常大的数据框,其中行作为观察,列作为遗传标记。我想创建一个新列,其中包含使用R的每个观察的选定列数的总和。
如果我有200列和100行,我想创建一个包含100行的新列,其中列为43到167列。列有1或0.使用包含每行的总和,我将能够对具有最多遗传标记的个体进行排序。
我觉得这很接近:
data$new=sum(data$[,43:167])
答案 0 :(得分:80)
您可以使用rowSums
rowSums(data)
应该会给你你想要的东西。
答案 1 :(得分:26)
rowSums函数(正如Greg提到的那样)会做你想要的,但你在答案中混合了子集化技术,在使用“[]”时不要使用“$”,你的代码看起来应该更像:
data$new <- rowSums( data[,43:167] )
如果你想使用除sum之外的函数,那么看看?申请在行或列中应用一般函数。
答案 2 :(得分:2)
我来到这里是希望找到一种方法来获取数据表中所有列的总和,并遇到实现上述解决方案的问题。使用cbind
函数将一列与所有列的和相加的方法:
cbind(data, total = rowSums(data))
此方法将total
列添加到数据中,避免了使用上述解决方案尝试对所有列求和时产生的对齐问题(有关此问题的讨论,请参见下面的帖子)。
答案 3 :(得分:1)
这也有帮助,但毫无疑问,最好的选择是 rowSums
函数:
data$new <- Reduce(function(x, y) {
x + data[, y]
}, init = data[, 43], 44:167)