我最近开始使用are,我想扩展我的数据矩阵。我找到了一种方法Scale a series between two points
x <- data.frame(step = c(1,2,3,4,5,6,7,8,9,10))
normalized <- (x-min(x))/(max(x)-min(x))
由于我的数据包含几个列,我建议只使用函数对某些列进行规范化。
normalized <- function(x) (x- min(x))/(max(x) - min(x))
x[] <- lapply(x, normalized)
此外,我意识到我的数据集中的某些数据点等于0,因此所呈现的公式不再起作用。我在此处添加了一个扩展程序:scaling r dataframe to 0-1 with NA values
normalized <- function(x, ...) {(x - min(x, ...)) / (max(x, ...) - min(x, ...))}
但我不明白我是如何编码的。例如,我想将第4,5,6和10列标准化,但我想将剩余的列放在数据集中? 我在第4栏试了一下:
data <- lapply(data[,4],normalized,na.rm= TRUE)
但它不起作用(而不是列表产生的数据框: - (...),是否有人知道如何解决它?
提前多多感谢您!
答案 0 :(得分:0)
试试这个,我修改了normalized
函数,考虑NA
值:
db<-data.frame(a=c(22,33,28,51,25,39,54,NA,50,66),
b=c(22,33,NA,51,25,39,54,NA,50,66))
normalized<-function(y) {
x<-y[!is.na(y)]
x<-(x - min(x)) / (max(x) - min(x))
y[!is.na(y)]<-x
return(y)
}
apply(db[,c(1,2)],2,normalized)
你的输出:
a b
[1,] 0.00000000 0.00000000
[2,] 0.25000000 0.25000000
[3,] 0.13636364 NA
[4,] 0.65909091 0.65909091
[5,] 0.06818182 0.06818182
[6,] 0.38636364 0.38636364
[7,] 0.72727273 0.72727273
[8,] NA NA
[9,] 0.63636364 0.63636364
[10,] 1.00000000 1.00000000