如何使用dplyr对数据框指定变量执行按行求和及max等函数?
这里给你整理了用dplyr对数据框指定变量做按行计算的方法,包括求和、取最大值这类常见操作,直接看例子就懂啦~
首先先看看我们用的示例数据集iris的前几行:
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
1. 按行求和
如果要对指定变量按行求和(比如所有以Petal开头的列),可以用select()筛选出目标列后,配合rowSums()实现:
library(dplyr) # 筛选Petal开头的列并按行求和 select(iris, starts_with('Petal')) %>% rowSums()
输出结果:
[1] 1.6 1.6 1.5 1.7 1.6 2.1 1.7 1.7 1.6 1.6 1.7 1.8 1.5 1.2 1.4 1.9 1.7 1.7 2.0 1.8 1.9 1.9 1.2 2.2 2.1 1.8 2.0 1.7 1.6 1.8 1.8 1.9 1.6 1....
2. 其他按行计算(max、mean等)
如果要使用max、min、mean这类通用函数做按行计算,更推荐用rowwise() + c_across()的组合,这种方式支持任意行级函数,还能直接把计算结果作为新列添加到数据框里:
示例1:计算每行Petal列的最大值
iris %>% rowwise() %>% mutate(Petal_max = max(c_across(starts_with('Petal')))) %>% ungroup() # 记得取消行分组,避免影响后续操作
示例2:计算每行Sepal列的平均值
iris %>% rowwise() %>% mutate(Sepal_mean = mean(c_across(starts_with('Sepal')))) %>% ungroup()
这里解释下:rowwise()会让数据框按行分组,c_across()支持用tidyselect语法(比如starts_with、contains)选择目标列,之后就能用你需要的函数对每行的这些列进行计算了,非常灵活~
内容的提问来源于stack exchange,提问作者mjandrews

