R中的错误替换

时间:2016-05-14 08:22:12

标签: r

我有两个变量A和B

a              b
234323432      NA
234324343      NA
238432788      NA
6786686        576575 
97892734       NA
87236488       NA
234683246      NA

我希望用b替换b为NA 我试过

la2$b[is.na(la2$b)] <- la2$a

前三个NA被正确替换,但在第四行之后,第五行b被第四行替换为a。是否有任何特定原因导致错误更换。

a              b
234323432      234323432
234324343      234324343
238432788      238432788
6786686        576575 
97892734       6786686
87236488       97892734
234683246      87236488

预期产量低于

a              b
234323432      234323432
234324343      234324343
238432788      238432788
6786686        576575 
97892734       97892734
87236488       87236488
234683246      234683246

1 个答案:

答案 0 :(得分:3)

要匹配两个向量的索引,您可以尝试

la2$b[is.na(la2$b)] <- la2$a[is.na(la2$b)]
#          a         b
#1 234323432 234323432
#2 234324343 234324343
#3 238432788 238432788
#4   6786686    576575
#5  97892734  97892734
#6  87236488  87236488
#7 234683246 234683246

如果计算时间很重要(在大数据集的情况下),最好计算一次索引并将它们存储在向量idx中,如@docendodiscimus指出的那样。

idx <- is.na(la2$b)
la2$b[idx] <- la2$a[idx]

数据

la2 <- structure(list(a = c(234323432L, 234324343L, 238432788L, 6786686L, 
            97892734L, 87236488L, 234683246L), b = c(NA, NA, NA, 576575L, 
            NA, NA, NA)), .Names = c("a", "b"), class = "data.frame", 
            row.names = c(NA, -7L))