不适用时,用一列覆盖另一列,并采用另一列值

时间:2019-04-01 07:10:47

标签: r

我的系统是带有Rstudio 1.1.463的R 3.5.1

我的数据帧cola中有两列colbdf

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

该怎么做? 预先感谢!

4 个答案:

答案 0 :(得分:1)

使用dplyrmutate_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))