ifelse/case_when - 基于涉及两个变量的多个条件的新变量
ifelse/case_when - new variable based on multiple conditions involving two variables
问题已通过恢复运行代码前的数据解决
在这个论坛的几个已回答问题的帮助下,我创建了我的代码,但是,它并没有完全按预期工作,我感谢任何解决问题的提示和技巧。
我的目标是根据包含受访者教育水平的变量“v_236”和包含受访者规格的 v_236 创建一个新变量“v_edu_recoded” ,如果他们在 v_236 中选择了“6”(意思是“其他”)。
所以,新变量 v_edu_recoded 基本上应该是其他两个变量的合并。 v_edu_recoded 应与 v_236 相同。只有当 v_236 是 '6' 时,然后根据答案,它应该被重新编码为其他数字之一(因为大多数人给出的答案是“其他”,这已经包含在 [=34 的类别中) =]).
我的问题是,在输出中只列出了十个重新编码的案例(他们在 v_236 中选择了 6 个)。我的条件的第一部分(所有选择 1-5 的 832 个案例)没有工作,并给出了 NA。
知道如何解决这个问题吗? (我也通过“变异”尝试过,但结果更糟..)
谨致问候,非常感谢您的帮助!
这是我的代码:
dr_ma$v_edu_recoded <- with(dr_ma, ifelse(
(v_236 == '1' & v_237 == '-99' | v_236 == '6' & v_237 == 'Schüler'), '1', ifelse(
(v_236 == '2' & v_237 == '-99'), '2', ifelse(
(v_236 == '3' & v_237 == '-99'| v_236 == '6' & v_237 == 'Fachabitur'),'3', ifelse(
(v_236 == '4' & v_237 == '-99' | v_236 == '6' & v_237 == 'Verwaltungsfachwirt'), '4', ifelse(
(v_236 == '5' & v_237 == '-99'| v_236 == '6' & v_237 == 'Diplom'| v_236 == '6' & v_237 == 'Universität'),'5', ifelse(
(v_236 == '6' & v_237 == 'meister'|v_236 == '6' & v_237 == 'Meister'|v_236 == '6' & v_237 == 'Fachakademie'),'6',NA
)))))))
这是我的输出摘要:
> summary(dr_ma$v_edu_recoded)
Length Class Mode
842 character character
> frq(dr_ma$v_edu_recoded)
x <character>
# total N=842 valid N=10 mean=4.60 sd=1.58
Value | N | Raw % | Valid % | Cum. %
--------------------------------------
1 | 1 | 0.12 | 10 | 10
3 | 1 | 0.12 | 10 | 20
4 | 1 | 0.12 | 10 | 30
5 | 4 | 0.48 | 40 | 70
6 | 3 | 0.36 | 30 | 100
<NA> | 832 | 98.81 | <NA> | <NA>
@CPak @caldwellst 感谢您的超级快速回复!我试了case_when,结果还是一样,可能是我的条件设置不对,但是找不到问题所在
dr_ma$v_edu_recoded3 <- case_when (dr_ma$v_236 == 1 & dr_ma$v_237 == -99 | dr_ma$v_236 == 6 & dr_ma$v_237 == 'Schüler' ~1,
dr_ma$v_236 == 2 & dr_ma$v_237 == -99 ~ 2,
dr_ma$v_236 == 3 & dr_ma$v_237 == -99| dr_ma$v_236 == 6 & dr_ma$v_237 == 'Fachabitur' ~3,
dr_ma$v_236 == 4 & dr_ma$v_237 == -99 | dr_ma$v_236 == 6 & dr_ma$v_237 == 'Verwaltungsfachwirt' ~ 4,
dr_ma$v_236 == 5 & dr_ma$v_237 == -99| dr_ma$v_236 == 6 & dr_ma$v_237 == 'Diplom'| dr_ma$v_236 == '6' & dr_ma$v_237 == 'Universität' ~5,
dr_ma$v_236 == 6 & dr_ma$v_237 == 'meister'|dr_ma$v_236 == 6 & dr_ma$v_237 == 'Meister'|dr_ma$v_236 == '6' & dr_ma$v_237 == 'Fachakademie' ~6,TRUE~NA_real_)
summary(dr_ma$v_edu_recoded3)
frq(dr_ma$v_edu_recoded3)
> summary(dr_ma$v_edu_recoded3)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
1.00 4.25 5.00 4.60 5.75 6.00 832
> frq(dr_ma$v_edu_recoded3)
x <numeric>
# total N=842 valid N=10 mean=4.60 sd=1.58
Value | N | Raw % | Valid % | Cum. %
--------------------------------------
1 | 1 | 0.12 | 10 | 10
3 | 1 | 0.12 | 10 | 20
4 | 1 | 0.12 | 10 | 30
5 | 4 | 0.48 | 40 | 70
6 | 3 | 0.36 | 30 | 100
<NA> | 832 | 98.81 | <NA> | <NA>
再次恢复运行代码前的数据,问题已解决。当运行
(dput(head(dr_ma, 10))
@CPak提出的,发现原来的数据被之前的多次recoding弄乱了,把它恢复到初始状态就是解决办法。
问题已通过恢复运行代码前的数据解决
在这个论坛的几个已回答问题的帮助下,我创建了我的代码,但是,它并没有完全按预期工作,我感谢任何解决问题的提示和技巧。
我的目标是根据包含受访者教育水平的变量“v_236”和包含受访者规格的 v_236 创建一个新变量“v_edu_recoded” ,如果他们在 v_236 中选择了“6”(意思是“其他”)。 所以,新变量 v_edu_recoded 基本上应该是其他两个变量的合并。 v_edu_recoded 应与 v_236 相同。只有当 v_236 是 '6' 时,然后根据答案,它应该被重新编码为其他数字之一(因为大多数人给出的答案是“其他”,这已经包含在 [=34 的类别中) =]).
我的问题是,在输出中只列出了十个重新编码的案例(他们在 v_236 中选择了 6 个)。我的条件的第一部分(所有选择 1-5 的 832 个案例)没有工作,并给出了 NA。
知道如何解决这个问题吗? (我也通过“变异”尝试过,但结果更糟..) 谨致问候,非常感谢您的帮助!
这是我的代码:
dr_ma$v_edu_recoded <- with(dr_ma, ifelse(
(v_236 == '1' & v_237 == '-99' | v_236 == '6' & v_237 == 'Schüler'), '1', ifelse(
(v_236 == '2' & v_237 == '-99'), '2', ifelse(
(v_236 == '3' & v_237 == '-99'| v_236 == '6' & v_237 == 'Fachabitur'),'3', ifelse(
(v_236 == '4' & v_237 == '-99' | v_236 == '6' & v_237 == 'Verwaltungsfachwirt'), '4', ifelse(
(v_236 == '5' & v_237 == '-99'| v_236 == '6' & v_237 == 'Diplom'| v_236 == '6' & v_237 == 'Universität'),'5', ifelse(
(v_236 == '6' & v_237 == 'meister'|v_236 == '6' & v_237 == 'Meister'|v_236 == '6' & v_237 == 'Fachakademie'),'6',NA
)))))))
这是我的输出摘要:
> summary(dr_ma$v_edu_recoded)
Length Class Mode
842 character character
> frq(dr_ma$v_edu_recoded)
x <character>
# total N=842 valid N=10 mean=4.60 sd=1.58
Value | N | Raw % | Valid % | Cum. %
--------------------------------------
1 | 1 | 0.12 | 10 | 10
3 | 1 | 0.12 | 10 | 20
4 | 1 | 0.12 | 10 | 30
5 | 4 | 0.48 | 40 | 70
6 | 3 | 0.36 | 30 | 100
<NA> | 832 | 98.81 | <NA> | <NA>
@CPak @caldwellst 感谢您的超级快速回复!我试了case_when,结果还是一样,可能是我的条件设置不对,但是找不到问题所在
dr_ma$v_edu_recoded3 <- case_when (dr_ma$v_236 == 1 & dr_ma$v_237 == -99 | dr_ma$v_236 == 6 & dr_ma$v_237 == 'Schüler' ~1,
dr_ma$v_236 == 2 & dr_ma$v_237 == -99 ~ 2,
dr_ma$v_236 == 3 & dr_ma$v_237 == -99| dr_ma$v_236 == 6 & dr_ma$v_237 == 'Fachabitur' ~3,
dr_ma$v_236 == 4 & dr_ma$v_237 == -99 | dr_ma$v_236 == 6 & dr_ma$v_237 == 'Verwaltungsfachwirt' ~ 4,
dr_ma$v_236 == 5 & dr_ma$v_237 == -99| dr_ma$v_236 == 6 & dr_ma$v_237 == 'Diplom'| dr_ma$v_236 == '6' & dr_ma$v_237 == 'Universität' ~5,
dr_ma$v_236 == 6 & dr_ma$v_237 == 'meister'|dr_ma$v_236 == 6 & dr_ma$v_237 == 'Meister'|dr_ma$v_236 == '6' & dr_ma$v_237 == 'Fachakademie' ~6,TRUE~NA_real_)
summary(dr_ma$v_edu_recoded3)
frq(dr_ma$v_edu_recoded3)
> summary(dr_ma$v_edu_recoded3)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
1.00 4.25 5.00 4.60 5.75 6.00 832
> frq(dr_ma$v_edu_recoded3)
x <numeric>
# total N=842 valid N=10 mean=4.60 sd=1.58
Value | N | Raw % | Valid % | Cum. %
--------------------------------------
1 | 1 | 0.12 | 10 | 10
3 | 1 | 0.12 | 10 | 20
4 | 1 | 0.12 | 10 | 30
5 | 4 | 0.48 | 40 | 70
6 | 3 | 0.36 | 30 | 100
<NA> | 832 | 98.81 | <NA> | <NA>
再次恢复运行代码前的数据,问题已解决。当运行
(dput(head(dr_ma, 10))
@CPak提出的,发现原来的数据被之前的多次recoding弄乱了,把它恢复到初始状态就是解决办法。