【问题标题】:Combining two variables to create new variable组合两个变量以创建新变量
【发布时间】:2021-04-17 13:51:58
【问题描述】:

我想将两个只有一个答案的变量组合成一个同时有两个答案的变量。

例子

IPV_YES 只有答案为 1 IPV_NO 只有 2 的答案

我想将它们组合成一个名为 IPV 的变量,该变量将具有来自两个单独类别的 1 和 2 结果。

我尝试过使用 ifelse 命令,但它只显示 IPV_YES 的值。

我拥有的数据集

我想要的结果

【问题讨论】:

  • ifelse(IPV_YES == 1, 1, ifelse(IPV_NO == 2, 2, NA))
  • 感谢您的回答,但是当我使用它时,它只显示 IPV_YES 的响应。 IPV_NO 根本不显示在结果表等中。
  • 您应该提供一个示例数据集。 @Phil 的解决方案看起来不错。
  • 我已经在原始帖子中添加了带有示例数据集的图像。

标签: r if-statement merge


【解决方案1】:

我的回答

df %>% mutate(across(everything(), ~ifelse(. == "", NA, as.numeric(.)))) %>%
  group_by(ID) %>% 
  rowwise() %>%
  transmute(IPV = sum(c_across(everything()), na.rm = T))

# A tibble: 4 x 2
# Rowwise:  ID
     ID   IPV
  <dbl> <dbl>
1     1     1
2     2     2
3     3     1
4     4     2

数据

df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))

【讨论】:

    【解决方案2】:

    ''转换为NA后我们可以使用coalesce

    library(dplyr)
    df <- df %>%
        transmute(ID, IPV = coalesce(na_if(IPV_YES, ""), na_if(IPV_NO, ""))) %>%
        type.convert(as.is = TRUE)
    

    数据

    df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))
    

    【讨论】:

      【解决方案3】:
      df$IPV <- ifelse(df$IPV_YES != "", df$IPV_YES, df$IPV_NO[!df$IPV_NO==""])
      

      在这里,我们指定一个ifelse 语句;可以这样解释:如果df$IPV_YES 中的值为空白,则给出df$IPV_YES 中的值,否则给出df$IPV_NO 中非空白的值。

      如果要删除 IPV_* 列:

      df[,2:3] <- NULL
      

      结果:

      df
        ID IPV
      1  1   1
      2  2   2
      3  3   1
      4  4   2
      

      数据:

      df <- data.frame(ID = 1:4, IPV_YES = c(1,"",1,""), IPV_NO = c("",2,"",2))
      

      【讨论】:

        【解决方案4】:

        也许你可以试试下面的代码

        replace(df, df == "", NA) %>%
          mutate(IPV = coalesce(IPV_YES, IPV_NO)) %>%
          select(ID, IPV) %>%
          type.convert(as.is = TRUE)
        

        给了

          ID IPV
        1  1   1
        2  2   2
        3  3   1
        4  4   2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-07
          • 2021-11-08
          • 1970-01-01
          相关资源
          最近更新 更多