【问题标题】:Dealing with NAs in a loop循环处理 NA
【发布时间】:2020-12-15 19:38:53
【问题描述】:

我有一个循环检查每个 Zipcode[i] 是否等于 Zipcode[j],其中 Zipcode[j] 的条目有一些 NA。如果 Zipcode[ j ] 与列表 urbanZips 中的任何 Zipcode 匹配,我只需要 Urban 的虚拟变量取 1。

我试过了

for(i in 1:end){
    for(j in 1:end_1){
        if(urbanZips[i]==data_individual$Zipcode[j]) data_individual$Urban=1
    }
}

我也试过了

for(i in 1:end){
    for(j in 1:end_1){
        if(urbanZips[i]==data_individual$Zipcode[j]){
            data_individual$Urban[j]=1
        } else {
            data_individual$Urban[j]=0
        }
    }
}

对于两者,我都会收到Error in if (urbanZips[i] == data_individual$Zipcode[j]) data_individual$Urban = 1: missing value where TRUE/FALSE needed

我知道有 NA,但也可能有一些缺失值。有接近一百万个观测值。

【问题讨论】:

标签: r loops for-loop if-statement


【解决方案1】:

我们可以在这里使用outer

m1 <- outer(urbanZips, data_individual$Zipcode, FUN = `==`)
+(colSums(m1, na.rm = TRUE) > 0)

【讨论】:

    【解决方案2】:

    自己能弄明白,把这个留在这里,以防其他人遇到这样的事情。

    library(data.table)

    setDT(data_individual)

    data_individual &lt;- data_individual[, Urban := as.numeric(Zipcode %in% urbanZips)]

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2019-08-06
      • 1970-01-01
      • 2013-03-14
      • 2011-07-26
      • 2017-06-15
      • 2018-04-17
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多