我试图在0和1范围内一次归一化我的矩阵数据的所有行。但我不知道该怎么做.. 例如,我想规范化每个“obs1”,“obs2”,“obs3”。因此,将使用每个“obs1”,“obs2”,“obs3”的最小值,最大值和总和。 我的数据格式是,
`MYDATA
a b c d e
obs1 8.15609 11.5379 11.1401 8.95186 7.95722
obs2 339.89800 856.3470 691.3490 590.28600 543.67200
obs3 2.12776 46.4561 136.8860 118.09100 119.86400
`
此外,当我搜索执行此操作时,人们使用“function()”。什么时候使用?
非常感谢您的帮助! :)
答案 0 :(得分:23)
要标准化每一行,您可以使用apply
,然后从每列中减去最小值,然后除以最大值和最小值之间的差值:
t(apply(mydata, 1, function(x)(x-min(x))/(max(x)-min(x))))
给你
a b c d e
obs1 0.05553973 1.0000000 0.8889038 0.2777796 0.0000000
obs2 0.00000000 1.0000000 0.6805144 0.4848262 0.3945675
obs3 0.00000000 0.3289472 1.0000000 0.8605280 0.8736849
您应用函数
会发生什么function(x){
(x-min(x))/(max(x)-min(x))
}
到数据框的每一行。
答案 1 :(得分:1)
apply(mydata, 1, rescale)
其中第二个参数1
告诉应用于行。
默认范围是[0,1],但可以使用to
参数指定自定义范围,该参数将转发到rescale
函数:
apply(mydata, 1, rescale, to=c(1,2))
Dependecy:
if(!require(scales)){
install.packages("scales", dependencies=TRUE)
library(scales)
}
答案 2 :(得分:0)
for(i in 2:length(mydata[1,])){
mydata[,i] <- prop.table(mydata[,i])
}
规范化矩阵将在mydata中更新