将矩阵<0.1中的所有值替换为0

mEv*_*ans 49 replace r

我有一个空气质量模型的颗粒物浓度估算矩阵(2601乘58).由于现实生活中的空气质量监测器无法测量低于0.1 ug/L,我需要替换矩阵中<0.1具有零/ NA/null值的所有值.

有人建议ifelse(test, true, false)使用逻辑语句,但是当我尝试这个时它会删除所有内容.

Har*_*lan 65

X[X < .1] <- 0
Run Code Online (Sandbox Code Playgroud)

(或NA,虽然在这种情况下0听起来更合适.)

矩阵只是具有维度的向量,因此您可以在分配时将它们视为向量.在这种情况下,您将在X上创建一个指示较小值的布尔向量,并将右侧分配给每个为TRUE的元素.

  • @mEvans:如果你在不同的列中有不同类型的数据,这意味着你可能有一个数据框,而不是一个矩阵.这些是R中的不同生物,尽管许多操作都适用于两者.在进行任何其他操作之前,您应该检查数据集是什么,因为这可能会在以后为您节省很多痛苦. (7认同)
  • 对于cols的子集,你可以使用:`X [,c(1,3,5)] < - apply(X [,c(1,3,5)],2,function(x)ifelse(x < 0.1,0,x))`(对于第1,3和5列). (2认同)
  • @GuilhermeSalomé - 您可以添加`drop = FALSE`以确保它可以使用单个列. (2认同)

Jus*_*tin 58

ifelse 应该管用:

mat <- matrix(runif(100),ncol=5)
mat <- ifelse(mat<0.1,NA,mat)
Run Code Online (Sandbox Code Playgroud)

但我会选择Harlan对我的回答.

mat[mat < 0.1] <- NA
Run Code Online (Sandbox Code Playgroud)