R中的错误替换
我有两个变量A和BR中的错误替换,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
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))