简单的逻辑替换问题;我有一个数据框,如:
mydf <- expand.grid(var1 = c('type1', 'type2'), var2 = c(7, 6, "NA"), var3 = 9)
我想用var2中的值替换var3中的值,除非var2是NA。因此得到的新var3应该是7,7,6,6,NA,NA。在试图解决这个问题时,我注意到了
mydf$var3[mydf$var2 == 7] <- 5
正确地将mydf的第1行和第2行标识为需要替换,并且仅留下最后四行,因此我得到var3 = 5,5,9,9,9,9。但是,如果我尝试
mydf$var3[!is.na(mydf$var2)] <- 5
我得到var3 = 5,5,5,5,5,5。那么为什么它没有跳过最后两行,其中var2是NA?接下来的问题是,不知道如何将替换值变为var2而不是常量。当我尝试
mydf$var3[!is.na(mydf$var2)] <- mydf$var2
我得到var3 = 1,1,2,2,3,3。我根本不明白。
答案 0 :(得分:0)
与评论中一样,字符串"NA"
不是NA
值。因此is.na("NA")
为FALSE
并且所有行都已选中。只需使用"NA"
替换定义中的NA
。
mydf <- expand.grid(var1 = c('type1', 'type2'), var2 = c(7, 6, NA), var3 = 9)
mydf$var3[!is.na(mydf$var2)] <- mydf$var2[!is.na(mydf$var2)]
请注意,您不能只用mydf$var2
替换左侧,因为它们现在具有不相等的长度 - 在您没有此错误之前,因为没有NA
。