R中的错误替换

R中的错误替换,r,R,我有两个变量A和B a b 234323432 NA 234324343 NA 238432788 NA 6786686 576575 97892734 NA 87236488 NA 234683246 NA 当b是NA时,我想用a代替b 我试过了 la2$b[is.na(la2$b)] <- la2$a 预期产出低于 a b 234323432

我有两个变量A和B

a              b
234323432      NA
234324343      NA
238432788      NA
6786686        576575 
97892734       NA
87236488       NA
234683246      NA
当b是NA时,我想用a代替b 我试过了

la2$b[is.na(la2$b)] <- la2$a
预期产出低于

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

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

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
数据

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))

la2您需要在赋值的两侧具有相同的选择逻辑。你应该得到一个关于大小不匹配的警告。或者,为了避免重复计算
is.na(la2$b)
你可以使用一个索引:
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))