你可以使用下面的基本语法,在R中使用来自dplyr的函数对数据框中的每一行应用一个函数
df %>%
rowwise() %>%
mutate(mean_value = mean(c(col1, col2, col3), na.rm=TRUE))
这个特殊的例子计算了数据框中每一行的col1、col2和col3的平均值,但是你可以用任何你想计算不同指标的函数来替换mean()函数。
下面的例子展示了如何在实践中使用这个语法,下面的数据框包含了不同篮球运动员在不同比赛中的得分信息。
#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:每行中特定列的平均值
下面的代码显示了如何计算数据框中每一行的game1 和game3列的均值:
library(dplyr)
#calculate mean of game1 and game3
df %>%
rowwise() %>%
mutate(mean_points = mean(c(game1, game3), na.rm=TRUE))
# A tibble: 6 x 4
# Rowwise:
game1 game2 game3 mean_points
1 22 12 NA 22
2 25 10 15 20
3 29 6 15 22
4 13 6 18 15.5
5 22 8 22 22
6 30 11 13 21.5
从输出结果中我们可以看到:
- 第一行中game1和game3的均值是22
- 第二行中game1和game3的平均值是20
- 第三行的游戏1和游戏3的平均值是22
以此类推。
例2:每行中特定列的最大值
下面的代码显示了如何计算数据框中每一行的game2 和game3列的最大值:
library(dplyr)
#calculate max of game2 and game3
df %>%
rowwise() %>%
mutate(max_points = max(c(game2, game3), na.rm=TRUE))
# A tibble: 6 x 4
# Rowwise:
game1 game2 game3 max_points
1 22 12 NA 12
2 25 10 15 15
3 29 6 15 15
4 13 6 18 18
5 22 8 22 22
6 30 11 13 13
从输出结果中我们可以看到:
- 第一行中game2和game3的最大值是12
- 第二行中game2和game3的最大值是15
- 第三行中game2和game3的最大值是15
以此类推
例3:每行中特定列的标准偏差
下面的代码显示了如何计算数据框中每一行的game2 和game3列数值的标准差:
library(dplyr)
#calculate standard deviation of game2 and game3
df %>%
rowwise() %>%
mutate(sd_points = sd(c(game2, game3), na.rm=TRUE))
# A tibble: 6 x 4
# Rowwise:
game1 game2 game3 sd_points
1 22 12 NA NA
2 25 10 15 3.54
3 29 6 15 6.36
4 13 6 18 8.49
5 22 8 22 9.90
6 30 11 13 1.41
从输出结果中我们可以看到:
- 第一行中game2和game3的标准差是NA(因为标准差不能只从一个值计算)
- 第二行中game2和game3的标准差是3.54
- 第一行中的游戏2和游戏3的标准差是6.36
以此类推
注意:你可以在这里找到dplyr中rowwise()函数的完整文档。
其他资源
下面的教程解释了如何使用dplyr执行其他常见任务: