如何将数据框中的每一列重新调整为0-100比例? (在r中)

时间:2013-10-19 04:18:21

标签: r scaling

我试图让我的数据框的所有列都处于相同的比例..

现在我有类似的东西...其中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()但似乎无法让它工作。

2 个答案:

答案 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)