我有这个简单的数据框:
>fruits
X Apple Banana Orange
1 1 5.2 5.0 4.2
2 2 2.6 4.4 3.7
3 3 2.7 2.4 2.7
4 4 4.0 1.3 6.2
5 5 6.5 3.1 4.1
6 6 4.2 3.8 5.4
>str(fruits)
'data.fram e': 6 obs. of 4 variables:
$ X : Factor w/ 6 levels "1","2","3","4",..: 1 2 3 4 5 6
$ Apple : num 5.2 2.6 2.7 4 6.5 4.2
$ Banana: num 5 4.4 2.4 1.3 3.1 3.8
$ Orange: num 4.2 3.7 2.7 6.2 4.1 5.4
我需要对除第一列之外的所有行进行求和。我试着循环:
>for(i in 1:nrow(fruits)) {fruits$total[i] <- sum(fruits[i,-1])} print (fruits$total)
Error: unexpected symbol in "for(i in 1:nrow(fruits)) {fruits$total[i] <- sum(fruits[i,-1])} print"
有什么想法吗?
答案 0 :(得分:1)
如果@Roland希望发布答案,我会删除它。但是,rowSums
绝对是我做的方式。
设置与您匹配的数据:
> fruits <- read.table(h=T, text = "X Apple Banana Orange
1 1 5.2 5.0 4.2
2 2 2.6 4.4 3.7
3 3 2.7 2.4 2.7
4 4 4.0 1.3 6.2
5 5 6.5 3.1 4.1
6 6 4.2 3.8 5.4")
> fruits$X <- as.factor(fruits$X)
> sapply(fruits, class)
# X Apple Banana Orange
# "factor" "numeric" "numeric" "numeric"
获取特定于数据集的非因子列的行总和:
> rowSums(fruits[-1])
# 1 2 3 4 5 6
# 14.4 10.7 7.8 11.5 13.7 13.4
或者(甚至更好)如果你不知道因子列在数据中的位置,你可以在计算中删除它们,逻辑否定为is.factor
> rowSums(fruits[!sapply(fruits, is.factor)])
# 1 2 3 4 5 6
# 14.4 10.7 7.8 11.5 13.7 13.4
请注意,最后一行会从计算中删除所有系数列。