首页 > 解决方案 > 为什么 sum() 在应用于数据帧时不会产生与加法相同的值?

问题描述

出于好奇:我认为可以使用 sum() 在 R 数据框中创建一个新变量——目标是计算几个单个值的总分。然而 sum() 显然对列中的所有值求和,而不仅仅是单个案例的值。这背后的机制是什么,是否有一个函数可以像简单加法一样添加值?

Daten <- data.frame(
  cases = c("first", "second", "third"), 
  values1= c(1,2,3),
  values2= c(27,19,34),
  values3= c(2,8,7)
)




Daten$valcomb = sum(Daten$values1,Daten$values2,Daten$values3)

Daten$valcomb2 = Daten$values1+Daten$values2+Daten$values3

print(Daten)

输出

   cases values1 values2 values3 valcomb valcomb2
1  first       1      27       2     103       30
2 second       2      19       8     103       29
3  third       3      34       7     103       44

标签: rdataframesum

解决方案


如果要对行求和,则需要使用rowSums而不是sum. 显然,您不能包含非数字cases列,因此您需要rowSums(Daten[-1])获取数字行的总和。

within(Daten, sums <- rowSums(Daten[-1]))
#>    cases values1 values2 values3 sums
#> 1  first       1      27       2   30
#> 2 second       2      19       8   29
#> 3  third       3      34       7   44

或者,如果您使用的是dplyr

Daten %>% mutate(sums = rowSums(.[-1]))
#>    cases values1 values2 values3 sums
#> 1  first       1      27       2   30
#> 2 second       2      19       8   29
#> 3  third       3      34       7   44

推荐阅读