r - 为什么 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
解决方案
如果要对行求和,则需要使用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
推荐阅读
- file-management - 如何从 lf 文件管理器中打开多个文件?
- reactjs - 无法让 React-Beautiful-DND 和 React-Virtualized 一起工作
- python - 将数据帧结果连接到另一个数据帧
- c++ - 在 gtkmm 中滚动到 TextView 的底部
- javascript - Agora.io DYNAMIC_USE_STATIC_KEY 生成的 RTC Token (php)
- matplotlib - AWS EC2 导致 Streamlit ML App 出现问题
- python - cv2 从具有特定时间的图像数组创建视频
- django - 如何过滤 InheritanceQueryset 中的子类字段(避免 FieldError)
- reactjs - 将 React.Lazy 用于服务(非组件)类型的代码
- angular - mat-select-search 不加载初始列表