通常情况下,你可能想使用apply()函数将一个函数应用于R中数据框架的特定列。
然而,apply()函数在应用一个函数之前,首先强迫数据框中的所有列具有相同的对象类型,这有时会产生意想不到的后果。
一个更好的选择是**lapply()**函数,它使用以下基本语法:
df[c('col1', 'col2')] <- lapply(df[c('col1', 'col2')], my_function)
这个特殊的例子将函数my_function只应用于数据框中的col1和col2。
下面的例子展示了如何在实践中使用这种语法。
例子:将函数应用于数据框的特定列
假设我们在R中拥有以下数据框。
#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
points=c(19, 22, 15, NA, 14, 25, 25, 25),
rebounds=c(10, 6, 3, 7, 11, 13, 9, 12),
assists=c(4, 4, 3, 6, 7, 5, 10, 8))
#view data frame
df
team points rebounds assists
1 A 19 10 4
2 A 22 6 4
3 A 15 3 3
4 A NA 7 6
5 B 14 11 7
6 B 25 13 5
7 B 25 9 10
8 B 25 12 8
现在假设我们定义了以下函数,该函数将数值乘以2,然后加上1。
#define function
my_function <- function(x) x*2 + 1
我们可以使用下面的lapply()函数,将这个函数只应用于数据框中的点和反弹列。
#apply function to specific columns
df[c('points', 'rebounds')] <- lapply(df[c('points', 'rebounds')], my_function)
#view updated data frame
df
team points rebounds assists
1 A 39 21 4
2 A 45 13 4
3 A 31 7 3
4 A NA 15 6
5 B 29 23 7
6 B 51 27 5
7 B 51 19 10
8 B 51 25 8
从输出结果中我们可以看到,我们将得分和篮板列中的每个值都乘以2,然后加1。
同时注意到,球队和助攻栏保持不变。
其他资源
下面的教程解释了如何在R中执行其他常见任务: