如何在 dplyr 中使用 across() 函数(3 个示例)


您可以使用 R 中dplyr包中的across()函数对多列应用转换。

使用此功能的方法有无数种,但以下方法说明了一些常见用途:

方法 1:将函数应用于多列

 #multiply values in col1 and col2 by 2
df %>% 
  mutate(across(c(col1, col2), function (x) x*2))

方法2:计算多列的汇总统计量

 #calculate mean of col1 and col2
df %>%
  summarise(across(c(col1, col2), mean, na. rm = TRUE ))

方法 3:计算多个列的多个汇总统计量

 #calculate mean and standard deviation for col1 and col2
df %>%
  summarise(across(c(col1, col2), list(mean=mean, sd=sd), na. rm = TRUE ))

以下示例展示了如何将每种方法与以下数据框结合使用:

 #create data frame
df <- data. frame (conf=c('East', 'East', 'East', 'West', 'West', 'West'),
                 points=c(22, 25, 29, 13, 22, 30),
                 rebounds=c(12, 10, 6, 6, 8, 11))

#view data frame
df

  conf points rebounds
1 East 22 12
2 East 25 10
3 East 29 6
4 West 13 6
5 West 22 8
6 West 30 11

示例 1:将函数应用于多列

以下代码展示了如何使用across()函数将点数篮板数列中的值乘以 2:

 library (dplyr)

#multiply values in points and rebounds columns by 2
df %>% 
  mutate(across(c(points, rebounds), function (x) x*2))

  conf points rebounds
1 East 44 24
2 East 50 20
3 East 58 12
4 West 26 12
5 West 44 16
6 West 60 22

示例 2:计算多列的汇总统计量

以下代码展示了如何使用across()函数计算点数篮板数列的平均值:

 library (dplyr)

#calculate mean value of points an rebounds columns
df %>%
  summarise(across(c(points, rebounds), mean, na. rm = TRUE ))

  rebound points
1 23.5 8.833333

请注意,我们还可以使用is.numeric函数自动计算数据框中所有数字列的汇总统计量:

 library (dplyr)

#calculate mean value for every numeric column in data frame
df %>%
  summarise(across(where(is. numeric ), mean, na. rm = TRUE ))

  rebound points
1 23.5 8.833333

示例 3:计算多列的多个汇总统计信息

以下代码展示了如何使用across()函数计算点数篮板数列的平均值和标准差:

 library (dplyr)

#calculate mean and standard deviation for points and rebounds columns
df %>%
  summarise(across(c(points, rebounds), list(mean=mean, sd=sd), na. rm = TRUE ))

  points_mean points_sd rebounds_mean rebounds_sd
1 23.5 6.156298 8.833333 2.562551

注意:您可以在此处找到across()函数的完整文档。

其他资源

以下教程解释了如何使用 dplyr 执行其他常见功能:

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

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注