如何在R中特定列上使用apply()函数

494 阅读2分钟

通常情况下,你可能想使用apply()函数将一个函数应用于R中数据框架的特定列。

然而,apply()函数在应用一个函数之前,首先强迫数据框中的所有列具有相同的对象类型,这有时会产生意想不到的后果。

一个更好的选择是**lapply()**函数,它使用以下基本语法:

df[c('col1', 'col2')] <- lapply(df[c('col1', 'col2')], my_function)

这个特殊的例子将函数my_function只应用于数据框中的col1col2

下面的例子展示了如何在实践中使用这种语法。

例子:将函数应用于数据框的特定列

假设我们在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中执行其他常见任务:

R中apply()、lapply()、sapply()和tapply()指南
如何使用R中的transform函数