规范化范围为0和1的矩阵行

use*_*318 15 row r matrix

我试图在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
Run Code Online (Sandbox Code Playgroud)

`

此外,当我搜索执行此操作时,人们使用"function()".何时使用?

非常感谢您的帮助!:)

use*_*275 24

要对每一行进行标准化,您可以使用apply然后从每列中减去最小值,然后除以最大值和最小值之间的差值:

t(apply(mydata, 1, function(x)(x-min(x))/(max(x)-min(x))))
Run Code Online (Sandbox Code Playgroud)

给你

              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
Run Code Online (Sandbox Code Playgroud)

会发生什么是您应用该功能

function(x){
   (x-min(x))/(max(x)-min(x))
}
Run Code Online (Sandbox Code Playgroud)

到数据框的每一行.


小智 5

您可以按以下方式使用applywith :rescale

apply(mydata, 1, rescale)
Run Code Online (Sandbox Code Playgroud)

其中第二个参数1告诉 apply 处理行。

to默认范围为 [0, 1],但可以使用将转发给函数的参数指定自定义范围rescale

apply(mydata, 1, rescale, to=c(1,2))
Run Code Online (Sandbox Code Playgroud)

依赖性:

if(!require(scales)){
    install.packages("scales", dependencies=TRUE)
    library(scales)
}
Run Code Online (Sandbox Code Playgroud)