r-以逐行方式应用阈值,其中截止值相对于行的sd



我有一个类似的矩阵:

m <- matrix(rnorm(100), 100, 50)

我想一行一行地更改所有的值,这样任何一行以上的值(标准偏差(*2都将变为1,否则为0(基本上是一个阈值(。

我试过这样的东西:

cutoff <- function(x){
x[x < 2*sd(x)] <- 0
x[x > 2*sd(x)] <- 1
return(x)
} 
mT <- apply(m, 1, cutoff)

但它给了我一些不同的东西。如有任何帮助,我们将不胜感激。

您的代码是正确的,您需要转置结果,因为apply总是返回转置的结果(请参阅为什么apply((返回转置后的xts矩阵?(。

mT <- t(apply(m, 1, cutoff))

您还可以将cutoff功能缩减为-

cutoff <- function(x){
as.integer(x > 2*sd(x))
} 

x > 2*sd(x)返回一个逻辑值(TRUE/FALSE(,如果我们将其转换为整数,则会将TRUE更改为1,将FALSE更改为0。

这会起作用吗:

t(apply(m, 1, function(x) +(x > 2*sd(x))))

我们可以在没有t转运的情况下使用collapse中的dapply,并且是非常有效的

library(collapse)
dapply(m, cutoff, MARGIN = 1)

相关内容

  • 没有找到相关文章

最新更新