如何使用dplyr进行多列求和(附实例)

945 阅读1分钟

你可以使用以下方法,用dplyr对一个数据框架的多列数值进行求和:

方法1:在所有列中求和

df %>%
  mutate(sum = rowSums(., na.rm=TRUE))

方法2:在所有数字列中求和

df %>%
  mutate(sum = rowSums(across(where(is.numeric)), na.rm=TRUE))

方法3:在特定列中求和

df %>%
  mutate(sum = rowSums(across(c(col1, col2))))

下面的例子展示了如何用下面的数据框来实现每种方法,该数据框包含了不同篮球运动员在不同比赛中的得分信息。

#create data frame
df <- data.frame(game1=c(22, 25, 29, 13, 22, 30),
                 game2=c(12, 10, 6, 6, 8, 11),
                 game3=c(NA, 15, 15, 18, 22, 13))

#view data frame
df

  game1 game2 game3
1    22    12    NA
2    25    10    15
3    29     6    15
4    13     6    18
5    22     8    22
6    30    11    13

例子1:所有列的总和

下面的代码显示了如何计算数据框中所有列的数值之和:

library(dplyr)

#sum values across all columns
df %>%
  mutate(total_points = rowSums(., na.rm=TRUE))

  game1 game2 game3 total_points
1    22    12    NA           34
2    25    10    15           50
3    29     6    15           50
4    13     6    18           37
5    22     8    22           52
6    30    11    13           54

例2:所有数字列的总和

下面的代码显示了如何计算数据框中所有数字列的值之和:

library(dplyr) 

#sum values across all numeric columns
df %>%
  mutate(total_points = rowSums(across(where(is.numeric)), na.rm=TRUE))

  game1 game2 game3 total_points
1    22    12    NA           34
2    25    10    15           50
3    29     6    15           50
4    13     6    18           37
5    22     8    22           52
6    30    11    13           54

例3:特定列之和

下面的代码显示了如何计算游戏1游戏2列的数值之和:

library(dplyr) 

#sum values across game1 and game2 only
df %>%
  mutate(first2_sum = rowSums(across(c(game1, game2))))

  game1 game2 game3 first2_sum
1    22    12    NA         34
2    25    10    15         35
3    29     6    15         35
4    13     6    18         19
5    22     8    22         30
6    30    11    13         41

其他资源

下面的教程解释了如何使用dplyr执行其他常见任务:

如何使用dplyr删除行
如何使用dplyr排列行
如何使用dplyr按多个条件过滤