R语言 如何对除第1行之外的所有行求和,因为第1行是一个因子

vsikbqxv  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(200)

我有一个简单的数据框架:

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

有什么想法吗?

0x6upsns

0x6upsns1#

如果@罗兰想发布答案,我会删除这个。但是,是的,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

请记住,最后一行将从计算中删除所有因子列。

yhxst69z

yhxst69z2#

我和author有一个相似的主题,但是我希望保留在我的表中进行计算,因此我指定了要在rowSums()中使用的列名作为解决方案,如下所示:

fruits %>% 
  mutate(sum = rowSums(.[setdiff(names(.),"X")]))

#   X Apple Banana Orange  sum
# 1 1   5.2    5.0    4.2 14.4
# 2 2   2.6    4.4    3.7 10.7
# 3 3   2.7    2.4    2.7  7.8
# 4 4   4.0    1.3    6.2 11.5
# 5 5   6.5    3.1    4.1 13.7
# 6 6   4.2    3.8    5.4 13.4

相关问题