【问题标题】:Replacing values in a matrix for a selected number of columns将矩阵中的值替换为选定的列数
【发布时间】:2015-11-24 11:51:18
【问题描述】:

在给定的矩阵 a 中,带有整数和一些 NA : 如果我想用 99 替换所有 NA,我会这样做:

a[is.na(a)]<-99

如果我只想对第 2 列做同样的事情,下面的效果很好:

a[is.na(a[,2]),2]<-99

但如果我想为第 1 列和第 2 列执行此操作,这是行不通的:

a[is.na(a[,1:2]),1:2]<-99

都没有

a[is.na(a[,c(1:2)]),c(1:2)]<-99

上面写着(抱歉,用法语):

[&lt;-(*tmp*, is.na(a[, c(1:2)]), c(1:2), value = 99) 中的错误:
(下标) indice logique trop long

有人知道为什么吗?

【问题讨论】:

  • 如果问题是why 而不是how,那么答案是因为is.na(a[,c(1:2)]) 已经返回了一个二维逻辑矩阵 i>,再加上c(1:2)matrix 可以处理的维度太多了。在 R 中调试时,您应该从内到外检查内部函数首先执行的操作,然后再检查最终操作。

标签: r matrix replace


【解决方案1】:

首先对矩阵进行子集化,然后找到 NA。

set.seed(123)
xy <- matrix(NA, ncol = 3, nrow = 3)
xy[sample(1:9, 4)] <- runif(4)
xy

          [,1]      [,2]      [,3]
[1,] 0.7883051 0.4089769        NA
[2,]        NA        NA        NA
[3,]        NA 0.8830174 0.2875775

xy[, 1:2][is.na(xy)[, 1:2]] <- 99
xy

           [,1]       [,2]      [,3]
[1,]  0.7883051  0.4089769        NA
[2,] 99.0000000 99.0000000        NA
[3,] 99.0000000  0.8830174 0.2875775

【讨论】:

    猜你喜欢
    • 2020-08-08
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多