【问题标题】:Merging complementary columns in R [duplicate]合并R中的互补列[重复]
【发布时间】:2019-04-28 19:38:50
【问题描述】:

我正在为一个大学项目清理我的数据,我有两个变量,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


    【解决方案1】:

    我们可以使用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))
    

    【讨论】:

      【解决方案2】:

      我们可以通过使用它们的索引输入非 NA 值来创建向量投票。

      df <- data.frame(DidVote = c("x", NA, NA, "y"),
                       WouldVote = c(NA, "z", "y", NA))
      vote <- NULL
      
      would_vote_indx <- !is.na(df$WouldVote)
      vote[would_vote_indx] <- as.character(df$WouldVote[would_vote_indx])
      
      did_vote_indx <- !is.na(df$DidVote)
      vote[did_vote_indx] <- as.character(df$DidVote[did_vote_indx])
      
      df$Vote <- vote
      

      【讨论】:

        猜你喜欢
        • 2019-03-25
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        • 2019-03-04
        • 1970-01-01
        • 2019-11-08
        • 2021-11-27
        • 1970-01-01
        相关资源
        最近更新 更多