r -case_when()基于多个现有变量的条件创建一个新变量

发布于 2025-02-13 20:33:39 字数 2591 浏览 3 评论 0原文

我正在努力创建一个名为“ edu_category”的新变量,以指示每个人是否经历了女性超人(Wive的教育水平<丈夫的教育水平),女性同性恋(Wive's Education Level ==丈夫)或女性降临(Wive的教育水平>丈夫的教育水平;丈夫的教育水平; )。

我的数据看起来像这样(女性== 1表示这个人是女性,0表示男性):

persyid女性教育配偶配偶教育
101131024
102041013
103121042
1042 104 022 104103 2
105051066
106161055

我希望创建一个新变量,以使我的数据看起来像这样:

persyid女性教育配偶配偶教育edu_category
101 11 131024毛磨
102041013杂质
103121042fhomogamy
104021032fhomogamy
105051066fhypogamy
106161055fhypypogamy

在这里== 0)教育水平为5,他的配偶(第106人)的教育水平为6,所以这是女性迟来,Wive的教育>丈夫(默认情况下,每个人的配偶都是异性的)。

现在,让我们看一下ID“ 106”的人,因为她是105人的配偶,我们还用相同的“ fhypogamy”填充了变量“ edu_category”。因此,从本质上讲,我们正在研究每个夫妻。

我尝试的是:

df2 <- df1 %>%
  mutate(edu_category = case_when((SpouseEducation > EducationLevel) | (Female == 1) ~ 'FemaleHypergamy',
                                   (SpouseEducation == EducationLevel) | (Female == 1) ~ 'FemaleHomogamy',
                                   (SpouseEducation < EducationLevel) | (Female == 1) ~ 'FemaleHypogamy',
                                   (SpouseEducation > EducationLevel) | (Female == 0) ~ 'FemaleHypogamy',
                                   (SpouseEducation == EducationLevel) | (Female == 0) ~ 'FemaleHomogamy',
                                   (SpouseEducation < EducationLevel) | (Female == 0) ~ 'FemaleHypergamy'))

但是,它并没有给出我的准确结果 - 变量“ edu_category”本身是成功创建的,而是“女性hyhypergamy”,“ amemhomogamy”和“ emagenhypogamy”并没有反映准确的情况。

我应该怎么办?谢谢您的帮助!

I am struggling to create a new variable named "edu_category" to indicate whether each person experiences Female Hypergamy (wive's education level < husband's), Female Homogamy (wive's education level == husband's), or Female Hypogamy (wive's education level > husband's).

My data looks like this (Female == 1 indicates this person is female, 0 indicates male):

PersonIDFemaleEducationLevelSpouseIDSpouseEducation
101131024
102041013
103121042
104021032
105051066
106161055

I wish to create a new variable so that my data looks like this:

PersonIDFemaleEducationLevelSpouseIDSpouseEducationedu_category
101131024FHypergamy
102041013FHypergamy
103121042FHomogamy
104021032FHomogamy
105051066FHypogamy
106161055FHypogamy

Here, let's look at person with ID "105", his (because female == 0) education level is 5, his spouse's (person 106's) education level is 6, so it's Female Hypogamy, wive's education > husband's (we assume by default everyone's spouse is of opposite sex).

Now let's look at person with ID "106", since she is person 105's spouse, we also fill the variable "edu_category" with the same "FHypogamy". So essentially, we are looking at every unit of couples.

What I tried:

df2 <- df1 %>%
  mutate(edu_category = case_when((SpouseEducation > EducationLevel) | (Female == 1) ~ 'FemaleHypergamy',
                                   (SpouseEducation == EducationLevel) | (Female == 1) ~ 'FemaleHomogamy',
                                   (SpouseEducation < EducationLevel) | (Female == 1) ~ 'FemaleHypogamy',
                                   (SpouseEducation > EducationLevel) | (Female == 0) ~ 'FemaleHypogamy',
                                   (SpouseEducation == EducationLevel) | (Female == 0) ~ 'FemaleHomogamy',
                                   (SpouseEducation < EducationLevel) | (Female == 0) ~ 'FemaleHypergamy'))

However, it's not giving my accurate results - the variable "edu_category" itself is successfully created, but the "FemaleHypergamy", "FemaleHomogamy", and "FemaleHypogamy" are not reflecting accurate situations.

What should I do? Thank you for the help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迟月 2025-02-20 20:33:39

一种方法可能是使用条件,然后填充创建的Na's:

library(dplyr)
library(tidyr)

df %>% 
  mutate(edu_category = case_when(Female == 0 & EducationLevel < SpouseEducation ~ "FHypogamy",
                                  Female == 0 & EducationLevel == SpouseEducation ~ "Homogamy",
                                  Female == 0 & EducationLevel > SpouseEducation ~ "Hypergamy", 
                                  TRUE ~ NA_character_)) %>% 
  fill(edu_category, .direction = "updown")
  PersonID Female EducationLevel SpouseID SpouseEducation edu_category
1      101      1              3      102               4    Hypergamy
2      102      0              4      101               3    Hypergamy
3      103      1              2      104               2     Homogamy
4      104      0              2      103               2     Homogamy
5      105      0              5      106               6    FHypogamy
6      106      1              6      105               5    FHypogamy

One way could be using the conditions and then fill the created NA's:

library(dplyr)
library(tidyr)

df %>% 
  mutate(edu_category = case_when(Female == 0 & EducationLevel < SpouseEducation ~ "FHypogamy",
                                  Female == 0 & EducationLevel == SpouseEducation ~ "Homogamy",
                                  Female == 0 & EducationLevel > SpouseEducation ~ "Hypergamy", 
                                  TRUE ~ NA_character_)) %>% 
  fill(edu_category, .direction = "updown")
  PersonID Female EducationLevel SpouseID SpouseEducation edu_category
1      101      1              3      102               4    Hypergamy
2      102      0              4      101               3    Hypergamy
3      103      1              2      104               2     Homogamy
4      104      0              2      103               2     Homogamy
5      105      0              5      106               6    FHypogamy
6      106      1              6      105               5    FHypogamy
娇俏 2025-02-20 20:33:39
df2 <- df1 %>%
  mutate(edu_category = case_when(
    (SpouseEducation > EducationLevel & Female == 1) ~ 'FemaleHypergamy',
    (SpouseEducation > EducationLevel & Female == 0) ~ 'FemaleHypogamy',
    (SpouseEducation < EducationLevel & Female == 1) ~ 'FemaleHypogamy',
    (SpouseEducation < EducationLevel & Female == 0) ~ 'FemaleHypergamy',
  SpouseEducation == EducationLevel  ~ 'FemaleHomogamy'))
df2 <- df1 %>%
  mutate(edu_category = case_when(
    (SpouseEducation > EducationLevel & Female == 1) ~ 'FemaleHypergamy',
    (SpouseEducation > EducationLevel & Female == 0) ~ 'FemaleHypogamy',
    (SpouseEducation < EducationLevel & Female == 1) ~ 'FemaleHypogamy',
    (SpouseEducation < EducationLevel & Female == 0) ~ 'FemaleHypergamy',
  SpouseEducation == EducationLevel  ~ 'FemaleHomogamy'))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文