首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R替换矩阵中的NAs

R替换矩阵中的NAs
EN

Stack Overflow用户
提问于 2012-06-21 22:43:15
回答 1查看 5.7K关注 0票数 1

在R中,我有一个缺少一些值的数据框,因此read.table()函数使用NAs而不是空白单元格。

我写了以下内容:

代码语言:javascript
复制
a <- sample(1000:50000000, size=120, replace=TRUE)
values <- matrix(a, nrow=6, ncol=20)
mtx <- cbind.data.frame(values, c(rep(NA),6))
mtx <- apply(mtx, 2, function(x){
    if (x==NA) sample(100:500, replace=TRUE, size=nrow(mtx)) else (x)})

但是我有这个错误:

代码语言:javascript
复制
Error in if (x == NA) sample(100:500, replace = TRUE, size = nrow(mtx)) else (x) : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In if (x == NA) sample(100:500, replace = TRUE, size = nrow(mtx)) else (x) :
  the condition has length > 1 and only the first element will be used

有什么想法吗?

最佳里卡多

EN

回答 1

Stack Overflow用户

发布于 2012-06-21 22:52:38

您不能使用比较运算符来测试NA,因为值为NA或缺失。is.na()是以NA的形式识别缺失的适当函数。

下面是在矩阵values中替换NA的示例。这里的关键是以矢量化的方式工作,只识别哪些元素是NA的,然后使用索引将所有的NA替换为所需的值。

代码语言:javascript
复制
> set.seed(2)
> values <- matrix(sample(1000:50000000, size=120, replace=TRUE),
+                  nrow=6, ncol=20)
> ## add some NA to simulate
> values[sample(120, 20)] <- NA
> 
> ## how many NA
> (tot <- sum(is.na(values)))
[1] 20
> 
> ## replace the NA
> values[is.na(values)] <- sample(100:500, tot, replace=TRUE)
> 
> ## now how many NA
> (sum(is.na(values)))
[1] 0
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11140650

复制
相关文章

相似问题

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