如何总结除1之外的所有行,这是一个因素

时间:2014-06-06 13:45:23

标签: r

我有这个简单的数据框:

>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"

有什么想法吗?

1 个答案:

答案 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  

请注意,最后一行会从计算中删除所有系数列。