首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将矩阵<0.1中的所有值替换为0

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

Stack Overflow用户
提问于 2012-02-25 07:39:32
回答 6查看 175.4K关注 0票数 59

我有一个从空气质量模型估计的颗粒物浓度矩阵(2601乘58)。因为现实生活中的空气质量监测仪不能测量低于0.1ug/L的值,所以我需要将矩阵中所有为<0.1的值替换为0/NA/null值。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-25 07:48:43

ifelse应该可以工作:

代码语言:javascript
运行
复制
mat <- matrix(runif(100),ncol=5)
mat <- ifelse(mat<0.1,NA,mat)

但我会选择哈兰的答案而不是我的。

代码语言:javascript
运行
复制
mat[mat < 0.1] <- NA
票数 71
EN

Stack Overflow用户

发布于 2012-02-25 07:47:46

代码语言:javascript
运行
复制
X[X < .1] <- 0

(或NA,尽管在这种情况下0听起来更合适。)

矩阵就是有维数的向量,所以当你给它们赋值时,你可以把它们当作一个向量来对待。在本例中,您将在X上创建一个表示小值的布尔向量,并将右侧赋值给每个为TRUE的元素。

票数 82
EN

Stack Overflow用户

发布于 2012-12-06 19:19:16

我想你会发现'ifelse‘不是一个向量运算(它实际上是一个循环),所以它比向量等效项慢了几个数量级。R偏爱向量运算,这就是为什么apply,mapply,sapply对于某些计算来说是闪电般的快。

小的数据集,不是问题,但是如果你有一个长度为100k或更多的数组,你可以在任何涉及循环的方法下,在它完成之前做一顿烤肉晚餐。

下面的代码应该可以工作。

对于向量

代码语言:javascript
运行
复制
minvalue <- 0
X[X < minvalue] <- minvalue

用于Dataframe或Matrix。

代码语言:javascript
运行
复制
minvalue <- 0
n <- 10 #change to whatever.
columns <- c(1:n)
X[X[,columns] < minvalue,columns] <- minvalue

另一种快速方法,通过pmax和pmin函数,将条目限制在0和1之间,您可以将矩阵或数据帧作为第一个参数,没有问题。

代码语言:javascript
运行
复制
ulbound <- function(v,MAX=1,MIN=0) pmin(MAX,pmax(MIN,v))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9439619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档