我试图让我的数据框的所有列都处于相同的比例..
现在我有类似的东西...其中a是0-1比例b是100分,c是1-5分
a b c
0 89 4
1 93 3
0 88 5
我如何才能达到这样的100尺度......
a b c
0 89 80
100 93 60
0 88 100
我希望有点清楚.. 我已经尝试过scale()但似乎无法让它工作。
答案 0 :(得分:14)
如果scale
是数据框的名称,请使用dat
:
## for one column
dat$a <- scale(dat$a, center = FALSE, scale = max(dat$a, na.rm = TRUE)/100)
## for every column of your data frame
dat <- data.frame(lapply(dat, function(x) scale(x, center = FALSE, scale = max(x, na.rm = TRUE)/100)))
对于像这样的简单案例,您也可以编写自己的函数。
fn <- function(x) x * 100/max(x, na.rm = TRUE)
fn(c(0,1,0))
# [1] 0 100 0
## to one column
dat$a <- fn(dat$a)
## to all columns of your data frame
dat <- data.frame(lapply(dat, fn))
答案 1 :(得分:1)
我的经验是,这仍然没有答案,如果其中一列有-2,当前答案不会产生0-100比例。虽然我很欣赏答案,但是当我尝试它的时候,我的变量是-100到100而这仍然是一些负数?
如果这适用于您,我有一个解决方案:
rescale <- function(x) (x-min(x))/(max(x) - min(x)) * 100
dat <- rescale(dat)