阈值矩阵
Thresholding matrix
我正在尝试将过滤器应用于大型矩阵。矩阵 "logcounts1" 由 8978 行和 4 列组成。
应按行应用过滤器,这样我就可以 select 那些至少有一个值不在区间内的行。过滤器使用由每行的平均值组成的区间作为中心值 + - 标准差。每行的平均值和SD分别包含在向量"Average1"和"SDr1"中。
我还为其中至少一列值超出区间范围的行定义了矩阵 "alpha",并为存储值始终保持在区间范围内的行定义了 "beta"。
for (i in 1:8978) {
if (logcounts1[i,1] > average1 [i]+SDr1[i] | logcounts1[i,2] > average1 [i]+SDr1[i] | logcounts1[i,3] > average1 [i]+SDr1[i] | logcounts1[i,4] > average1 [i]+SDr1[i] | logcounts1[i,1] < average1 [i]+SDr1[i] | logcounts1[i,2] < average1 [i]+SDr1[i] | logcounts1[i,3] > average1 [i]+SDr1[i] | logcounts1[i,4] > average1 [i]+SDr1[i]) {
alpha <- rbind(alpha,logcounts1[i,])
} else {
beta <- rbind(beta, logcounts1[i,])
}
}
我真的希望你们能帮助我,我对此很陌生。最佳
I made an example on excel <- 点击此处
基本上,红色单元格是区间内的值(平均值+-标准偏差)。然后,具有超出范围值的第 1、2 和 5 行应存储在新矩阵 "alpha" 中,因此输出应为:
Alpha selected matrix
此外,不包含任何超出范围值的行也应存储在另一个矩阵("beta")中,输出:
Beta selected matrix
我选择了非循环方法,而不是使用子集。顶部只是生成可重现的数据。第 7 列和第 8 列是我计算下限和上限(平均值 - SD 和平均值 + SD)的地方。然后我使用范围将行的最低值和最高值拉入第 9 列和第 10 列(没有必要将它们添加为列,但我这样做是为了帮助向您展示正在发生的事情)。
然后我使用子集函数。 alpha 的规则是最低观察值小于平均值 - SD 或 (|) 最高观察值大于平均值 + SD。 beta的规则是最低观测值大于等于均值-SDand(&)最高观测值小于等于均值+SD.
# Dummy Data
df1 <- data.frame(matrix(c(rnorm(40, 0, 1)), ncol = 4))
df1[,5] <- apply(df1[,1:4], 1, mean)
df1[,6] <- sqrt(apply(df1[,1:4], 1, var))
# Add Mean and SD
df1[,7] <- df1[,5] - df1[,6]
df1[,8] <- df1[,5] + df1[,6]
# Get Range of Values of in 1:4
df1[,9] <- apply(df1[,1:4], 1, range)[1,]
df1[,10] <- apply(df1[,1:4], 1, range)[2,]
# Split
alpha <- subset(df1, df1[,9] < df1[,7] | df1[,10] > df1[,8])
beta <- subset(df1, df1[,9] >= df1[,7] & df1[,10] <= df1[,8])
# Clean up
df1[,c(7:10)] <- NULL
我正在尝试将过滤器应用于大型矩阵。矩阵 "logcounts1" 由 8978 行和 4 列组成。
应按行应用过滤器,这样我就可以 select 那些至少有一个值不在区间内的行。过滤器使用由每行的平均值组成的区间作为中心值 + - 标准差。每行的平均值和SD分别包含在向量"Average1"和"SDr1"中。
我还为其中至少一列值超出区间范围的行定义了矩阵 "alpha",并为存储值始终保持在区间范围内的行定义了 "beta"。
for (i in 1:8978) {
if (logcounts1[i,1] > average1 [i]+SDr1[i] | logcounts1[i,2] > average1 [i]+SDr1[i] | logcounts1[i,3] > average1 [i]+SDr1[i] | logcounts1[i,4] > average1 [i]+SDr1[i] | logcounts1[i,1] < average1 [i]+SDr1[i] | logcounts1[i,2] < average1 [i]+SDr1[i] | logcounts1[i,3] > average1 [i]+SDr1[i] | logcounts1[i,4] > average1 [i]+SDr1[i]) {
alpha <- rbind(alpha,logcounts1[i,])
} else {
beta <- rbind(beta, logcounts1[i,])
}
}
我真的希望你们能帮助我,我对此很陌生。最佳
I made an example on excel <- 点击此处
基本上,红色单元格是区间内的值(平均值+-标准偏差)。然后,具有超出范围值的第 1、2 和 5 行应存储在新矩阵 "alpha" 中,因此输出应为:
Alpha selected matrix
此外,不包含任何超出范围值的行也应存储在另一个矩阵("beta")中,输出:
Beta selected matrix
我选择了非循环方法,而不是使用子集。顶部只是生成可重现的数据。第 7 列和第 8 列是我计算下限和上限(平均值 - SD 和平均值 + SD)的地方。然后我使用范围将行的最低值和最高值拉入第 9 列和第 10 列(没有必要将它们添加为列,但我这样做是为了帮助向您展示正在发生的事情)。
然后我使用子集函数。 alpha 的规则是最低观察值小于平均值 - SD 或 (|) 最高观察值大于平均值 + SD。 beta的规则是最低观测值大于等于均值-SDand(&)最高观测值小于等于均值+SD.
# Dummy Data
df1 <- data.frame(matrix(c(rnorm(40, 0, 1)), ncol = 4))
df1[,5] <- apply(df1[,1:4], 1, mean)
df1[,6] <- sqrt(apply(df1[,1:4], 1, var))
# Add Mean and SD
df1[,7] <- df1[,5] - df1[,6]
df1[,8] <- df1[,5] + df1[,6]
# Get Range of Values of in 1:4
df1[,9] <- apply(df1[,1:4], 1, range)[1,]
df1[,10] <- apply(df1[,1:4], 1, range)[2,]
# Split
alpha <- subset(df1, df1[,9] < df1[,7] | df1[,10] > df1[,8])
beta <- subset(df1, df1[,9] >= df1[,7] & df1[,10] <= df1[,8])
# Clean up
df1[,c(7:10)] <- NULL