基于R中行的标准偏差从矩阵中删除一列数据
我试图对大型数据矩阵进行子集划分,其示例如下:基于R中行的标准偏差从矩阵中删除一列数据,r,R,我试图对大型数据矩阵进行子集划分,其示例如下: row 1/col 1 row 1/col 2 row 1/col 3 [1,] 855.815 749.574 754.950 [2,] 855.718 749.496 755.004 [3,] 855.846
row 1/col 1 row 1/col 2 row 1/col 3
[1,] 855.815 749.574 754.950
[2,] 855.718 749.496 755.004
[3,] 855.846 749.359 754.910
[4,] 855.746 749.299 754.795
[5,] 855.805 749.421 754.883
我尝试删除第一行的值高于或低于整个第一行平均值一个标准偏差的列,使用以下代码:
library(matrixStats)
x = data[,-1] > (rowMeans(data[,-1]) + rowSds(data[,-1]))
y = data[,-1] < (rowMeans(data[,-1]) - rowSds(data[,-1]))
subset(df2, !(x | y))
据我所知,R将其扩展为:
subset(df2, !(data[,-1] > (rowMeans(data[,-1]) + rowSds(data[,-1]))|data[,-1] < (rowMeans(data[,-1]) - rowSds(data[,-1]))))
子集(df2,!(数据[,-1]>(行均值(数据[,-1])+行数据集(数据[,-1]))|数据[,-1]<(行均值(数据[,-1])-行数据集(数据[,-1]))
逻辑论点太长了。我有什么遗漏吗?我对R缺乏经验,并且肯定有更简洁的方法来实现这一点,但从我所读到的内容来看,我认为子集将是最有用的
提前感谢您。您可以尝试以下方法:
df <- as.matrix(read.table(text='C1 C2 C3
[1,] 855.815 749.574 754.950
[2,] 855.718 749.496 755.004
[3,] 855.846 749.359 754.910
[4,] 855.746 749.299 754.795
[5,] 855.805 749.421 754.883', header=TRUE))
library(matrixStats)
df[,which(abs(df[1,] - rowMeans(df)[1]) < rowSds(df)[1])]
# C2 C3
#[1,] 749.574 754.950
#[2,] 749.496 755.004
#[3,] 749.359 754.910
#[4,] 749.299 754.795
#[5,] 749.421 754.883
df请使用dput
显示示例。此外,当您使用不属于base R一部分的软件包中的函数时,指出这一点很有帮助。在本例中,通过使用library(matrixStats)
G5W开始您的代码-我已经用它开始了我的代码?感谢您的回复-这对于我作为示例共享的数据非常有效。但是,当我将其应用于整个数据集并使用dim()查看列是否已被删除时,它仍然保持不变。对不起,我太傻了-谢谢你的帮助!
df <- as.matrix(read.table(text='C1 C2 C3
[1,] 855.815 749.574 754.950
[2,] 855.718 749.496 755.004
[3,] 855.846 749.359 754.910
[4,] 855.746 749.299 754.795
[5,] 855.805 749.421 754.883', header=TRUE))
library(matrixStats)
df[,which(abs(df[1,] - rowMeans(df)[1]) < rowSds(df)[1])]
# C2 C3
#[1,] 749.574 754.950
#[2,] 749.496 755.004
#[3,] 749.359 754.910
#[4,] 749.299 754.795
#[5,] 749.421 754.883