在多个条件下生成新变量
Generate new variable on multiple conditions
我有这个数据集:
$ 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中获得这个?
谢谢!
你可以试试这个。
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)
对 %in%
和 >
使用逻辑运算,将它们与 &
放在一起并将逻辑值强制为整数
df$fra <- as.numeric(df$educ_cat %in% c(5, 6) & df$pol_sof > 0.6)
我们可以使用条件为 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
我有这个数据集:
$ 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中获得这个?
谢谢!
你可以试试这个。
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)
对 %in%
和 >
使用逻辑运算,将它们与 &
放在一起并将逻辑值强制为整数
df$fra <- as.numeric(df$educ_cat %in% c(5, 6) & df$pol_sof > 0.6)
我们可以使用条件为 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