【问题标题】:Generate new variable on multiple conditions在多个条件下生成新变量
【发布时间】:2021-12-29 21:51:34
【问题描述】:

我有这个数据集:

$ id : num 805 805 805 851 851 851...

$ educ_cat: num 5 5 5 5 5 6 6 6 6 6 3 3 3 3 ...

$ pol_sof : num 1 1 1 0.8 1 1 1 1 0.8 1 0.6 0.4 0.4 ...

我想要的是创建一个逻辑变量 fra 0-1,基于两个标准:

如果educ_cat = 5 或 6 AND pol_sof>0.6,那么受访者应该得到 1。否则,受访者应该得到 0。

如何在 R 中获得这个?

谢谢!

【问题讨论】:

    标签: r variables recode


    【解决方案1】:

    你可以试试这个。

    df1$fra <- df1$educ_cat == 5 | df1$educ_cat == 6 & df1$pol_sof > 0.6
    # or
    df1$fra2 <- (df1$educ_cat == 5 | df1$educ_cat == 6 & df1$pol_sof > 0.6)*1
    df1
       educ_cat pol_sof   fra fra2
    1         5     1.0  TRUE    1
    2         5     1.0  TRUE    1
    3         5     1.0  TRUE    1
    4         5     0.8  TRUE    1
    5         5     1.0  TRUE    1
    6         6     1.0  TRUE    1
    7         3     0.3 FALSE    0
    8         6     1.0  TRUE    1
    9         6     0.1 FALSE    0
    10        6     0.8  TRUE    1
    11        6     1.0  TRUE    1
    12        3     0.6 FALSE    0
    13        3     0.4 FALSE    0
    14        3     0.4 FALSE    0
    

    数据

    educ_cat <- c(5, 5, 5, 5, 5, 6, 3, 6, 6, 6, 6, 3, 3, 3)
    pol_sof <- c(1, 1, 1, 0.8, 1, 1, 0.3, 1, 1, 0.8, 1, 0.6, 0.4, 0.4)
    df1 <- data.frame(educ_cat, pol_sof)
    

    【讨论】:

    • 代码几乎完成了它应该做的事情,但是,似乎我用 educ_cat 5 o 6 得到了 fra = 1。但是, educ_cat 5 或 6 上的每个人 pol_sof
    • @RH1994 这就是我得到的。检查第 9 行。
    【解决方案2】:

    %in%&gt; 使用逻辑运算,将它们与&amp; 放在一起并将逻辑值强制为整数

    df$fra <- as.numeric(df$educ_cat %in% c(5, 6) & df$pol_sof > 0.6)
    

    【讨论】:

      【解决方案3】:

      我们可以使用带有条件的ifelse 语句:

      library(dplyr)
      
      df1 %>% 
        mutate(fra = ifelse(educ_cat==5 | educ_cat==6 & pol_sof > 0.6, TRUE, FALSE))
      
        educ_cat pol_sof   fra
      1         5     1.0  TRUE
      2         5     1.0  TRUE
      3         5     1.0  TRUE
      4         5     0.8  TRUE
      5         5     1.0  TRUE
      6         6     1.0  TRUE
      7         3     0.3 FALSE
      8         6     1.0  TRUE
      9         6     1.0  TRUE
      10        6     0.8  TRUE
      11        6     1.0  TRUE
      12        3     0.6 FALSE
      13        3     0.4 FALSE
      14        3     0.4 FALSE
      

      【讨论】:

        猜你喜欢
        • 2020-12-09
        • 1970-01-01
        • 1970-01-01
        • 2023-02-25
        • 1970-01-01
        • 2019-09-27
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多