我的系统是带有Rstudio 1.1.463的R 3.5.1
我的数据帧cola
中有两列colb
和df
:
df <- data.frame(
cola = c("A","C",NA,"C"),
colb = c("C",NA,"C","D"))
df
如下所示:
cola colb
A C
C NA
NA C
C D
当colb
不是cola
时,我想用colb
覆盖NA
,当cola
是{{1}时,请采用colb
}。
预期结果如下:
NA
该怎么做? 预先感谢!
答案 0 :(得分:1)
使用dplyr
。 mutate_all
之所以完成,是因为示例数据具有因素。
df %>%
mutate_all(as.character) %>%
mutate(cola=ifelse(is.na(colb),cola,colb))
结果:
cola colb
1 C C
2 C <NA>
3 C C
4 D D
答案 1 :(得分:1)
coalesce
包中的 dplyr
函数在这里可能有用:
library(dplyr)
df %>%
mutate(cola = coalesce(colb, cola))
输出:
cola colb
1 C C
2 C <NA>
3 C C
4 D D
答案 2 :(得分:0)
当cola
不是colb
时,我们可以替换NA
中的值。
df$cola[!is.na(df$colb)] <- df$colb[!is.na(df$colb)]
# cola colb
#1 C C
#2 C <NA>
#3 C C
#4 D D
数据
df <- data.frame(
cola = c("A","C",NA,"C"),
colb = c("C",NA,"C","D"), stringsAsFactors = FALSE)
答案 3 :(得分:0)
我提供如下解决方案:
应该先将factor
列转换为character
列
df$cola<-ifelse(is.na(df$colb),df$cola,df$colb)
否则,请使用df<-mutate(df,cola = coalesce(colb, cola))