首页 > 解决方案 > 合并R中的互补列

问题描述

我正在为一个大学项目清理我的数据,我有两个变量,DidVote 和 WillVote,指示该人投票给谁(如果他们在实际选举中投票)以及他们会投票给谁(如果他们这样做了不在选举中投票)。这两列显然是互补的,这意味着如果 DidVote 有一些价值,WouldVote 是 NA,反之亦然。我想将这两个变量合并为一个,这意味着我想得到第三列之类的东西:

DidVote    WouldVote    Vote
x          NA           x
NA         z            z
NA         y            y
y          NA           y

我试图做以下事情:

data$Vote <- paste(data$DidVote,data$WouldVote)

但我最终得到的是:

DidVote    WouldVote    Vote
x          NA           x NA
NA         z            NA z
NA         y            NA y
y          NA           y NA

如何合并这两列,以便新变量从两个变量 DidVote 和 WillVote 中的每一个中获取非 NA 值?

标签: r

解决方案


我们可以用coalesce

library(dplyr)
df1 %>%
   mutate(Vote = coalesce(DidVote, WouldVote))
#   DidVote WouldVote Vote
#1       x      <NA>    x
#2    <NA>         z    z
#3    <NA>         y    y
#4       y      <NA>    y

数据

df1 <- structure(list(DidVote = c("x", NA, NA, "y"), WouldVote = c(NA, 
 "z", "y", NA), Vote = c("x", "z", "y", "y")), class = "data.frame", 
 row.names = c(NA, -4L))

推荐阅读