我有一个包含 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 在这里工作吗?
我们可以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)
作为对 @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)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |