R 使用一列覆盖另一列,在NA时采用另一列值

R 使用一列覆盖另一列,在NA时采用另一列值,r,R,我的系统是R3.5.1和Rstudio 1.1.463 在我的数据框df中有两列,cola和colb: df <- data.frame( cola = c("A","C",NA,"C"), colb = c("C",NA,"C","D")) 当colb不是NA时,我想用colb覆盖cola,当colb是NA时采用cola df$cola[!is.na(df$colb)] <- df$colb[!is.na(df$colb)] # cola colb #1

我的系统是R3.5.1和Rstudio 1.1.463

在我的数据框
df
中有两列,
cola
colb

df <- data.frame(
    cola = c("A","C",NA,"C"),
    colb = c("C",NA,"C","D"))
colb
不是
NA
时,我想用
colb
覆盖
cola
,当
colb
NA
时采用
cola

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
预期结果如下所示:

cola   colb   
C        C       
C        NA     
C        C      
D        D      
怎么做?
提前谢谢

使用
dplyr
。由于样本数据具有因子,
mutate\u 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
可乐可乐 1c 2 C 3C 四维
使用
dplyr
。由于样本数据具有因子,
mutate\u 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
可乐可乐 1c 2 C 3C 四维
colb
不是
NA
时,我们可以替换
cola
中的值

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$cola[!is.na(df$colb)]当
colb
不是
na
时,我们可以替换
cola
中的值

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$cola[!is.na(df$colb)]
coalesce
来自
dplyr
包的函数在这里很有用:

library(dplyr)

df %>%
  mutate(cola = coalesce(colb, cola))
输出:

  cola colb
1    C    C
2    C <NA>
3    C    C
4    D    D
可乐可乐 1c 2 C 3C 四维
聚合
来自
dplyr
软件包的功能在这里很有用:

library(dplyr)

df %>%
  mutate(cola = coalesce(colb, cola))
输出:

  cola colb
1    C    C
2    C <NA>
3    C    C
4    D    D
可乐可乐 1c 2 C 3C 四维
我提供的解决方案如下:
应首先将
因子
列转换为
字符


df$cola我提供的解决方案如下:
应首先将
因子
列转换为
字符


运行此答案时,
df$cola
找不到函数“%%>%”
install.packages(“dplyr”)
<代码>库(dplyr)
然后运行代码。当无法使用
%%>%%
时,我的答案有什么问题吗?@kittygirl这只是偏好和方便。很好。
运行此答案时找不到函数“%%>%”
install.packages(“dplyr”)
<代码>库(dplyr)
然后运行代码。当无法使用
%%>%%
时,我的答案有什么问题吗?@kittygirl这只是偏好和方便。很好。
在我运行这个答案时找不到函数“%%>%”
在我运行这个答案时找不到函数“%%>%”
。@kittygirl是的,你需要将它们保留为字符,否则t将无法使用不同级别的
因子分配值。我的答案如何,请给我评论。@kittygirl是的,您需要将它们保留为字符,否则t将无法使用不同级别的
因子
赋值。我的答案如何,请给我评论。这在功能上与其他答案相同,是的-这很好。如果你复制
df
并应用此函数,你将在
cola
中得到1、2、1、2的输出,而不是字符,因为列是因子。这在功能上与其他答案相同,所以是的-这很好。如果你复制
df
并应用此函数,你将得到1、2、1的输出,2在
cola
中,而不是字符,因为列是因子。