是否有用于对数据框的每一列执行基本操作的 R 函数?

Nak*_*hya 1 r

我有一个包含 n 列的数据框,如下所示,所有列都是数字(例如,下面只有 3 个,但实际的数字未知)。

col_1 col_2 col_3 
1      3     7   
3      8     9   
5      5     2 
8      10    1
11     9     2 
Run Code Online (Sandbox Code Playgroud)

我试图根据这个方程转换每一列的数据:(x-min(col)/(max(col)-min(col))以便每个元素都根据列中的值进行缩放。

有没有办法在不使用 for 循环遍历每一列的情况下做到这一点?将 sapply 或 tapply 在这里工作吗?

akr*_*run 8

我们可以scale在数据集上使用

scale(df1)
Run Code Online (Sandbox Code Playgroud)

或者,如果我们想使用自定义函数,请创建该函数,使用 循环遍历列lapply,应用该函数并将其分配回数据框

f1 <- function(x) (x-min(col)/(max(col)-min(col))
df1[] <- lapply(df1, f1)
Run Code Online (Sandbox Code Playgroud)

或者这可以用 mutate_all

library(dplyr) 
df1 %>%
    mutate_all(f1)
Run Code Online (Sandbox Code Playgroud)


lin*_*nog 5

作为对 @akrun 答案的补充,您还可以使用data.table

library(data.table)
setDT(df)
df[,lapply(.SD, function(x) return((x-min(col)/(max(col)-min(col)))]
Run Code Online (Sandbox Code Playgroud)

如果你想使用列的子集,你可以使用.SDcols参数,例如

library(data.table)
df[,lapply(.SD, function(x) return((x-min(col)/(max(col)-min(col))),
.SDcols = c('a','b')]
Run Code Online (Sandbox Code Playgroud)