我希望将此示例数据框中的NA值替换为“A”或“B”,具体取决于其“第二”列类别:(A代表A1,B代表B1)
df <- data.frame(first = c("A","A",NA,NA,"B",NA,NA,NA),second = c(rep("A1",4),rep("B1",4)))
df
first second
1 A A1
2 A A1
3 <NA> A1
4 <NA> A1
5 B B1
6 <NA> B1
7 <NA> B1
8 <NA> B1
这就是我希望结果数据框看起来像:
first second
1 A A1
2 A A1
3 A A1
4 A A1
5 B B1
6 B B1
7 B B1
8 B B1
我试过这个解决方案,但显然它不起作用:
df$first[is.na(df$first)] <- unique(df[!is.na(df$first),"first"])
我觉得可能有一个dplyr解决方案,但无法想到它。
谢谢!
答案 0 :(得分:1)
无需dplyr
。这应该在基础R中起作用:
df$first[is.na(df$first)] <- gsub("(\\w)\\d", "\\1", df$second[is.na(df$first)])
说明:gsub
通过匹配来自first
的[letter] [数字]并替换为[letter],将second
中的NA条目替换为来自second
的条目。
first second
1 A A1
2 A A1
3 A A1
4 A A1
5 B B1
6 B B1
7 B B1
8 B B1