对空字符串使用 case_when

问题描述 投票:0回答:1

我有一个数据集,其中询问孩子们是只说德语、德语和其他语言还是在家只说另一种语言。然后他们被问到在家说哪种语言(例如英语,0 - 否;1 = 是)。还有一个可以输入其他语言的字段。这被保存为字符变量。 由于孩子输入“仅德语”然后输入其他语言而出现错误,我想创建一个新变量“mig_1”,它最后区分有和没有移民背景的孩子(0 = 德语,1 = 有移民背景)移民背景)。

这是一个简短的示例(并未包含不同语言的所有变量):

kommschreib <- data.frame (code = c("013101", "013102", "013205", "114113", "014201", "053216"), mig = c(0, NA, 1, 2, 1, 0), englisch = c(0, 1, 1, 0, 0), sprache=c("niederländisch", "italienisch"))

通过我的代码,我已经可以涵盖他们在第一个问题中根本没有指定任何内容的情况(德语、德语和另一种语言,只是另一种语言),但随后标记了另一种语言。我已经介绍了他们指示“仅限德语”,但随后勾选了另一种语言的情况。我已经涵盖了“正常”情况(孩子们只表示德语,没有其他语言,或者孩子们表示德语和另一种语言/仅另一种语言)。

kommschreib <- kommschreib %>%
  mutate(mig_2 = case_when(englisch == 1 | arabisch == 1 | kurdisch == 1 | russisch == 1 | ukrainisch == 1 | farsi == 1 | polnisch == 1 | türkisch == 1 | albanisch == 1 ~ 1,
                           mig == 0 & englisch == 1 ~ 1,
                           mig == 0 & arabisch == 1 ~ 1,
                           mig == 0 & kurdisch == 1 ~ 1,
                           mig == 0 & russisch == 1 ~ 1,
                           mig == 0 & ukrainisch == 1 ~ 1,
                           mig == 0 & farsi == 1 ~ 1,
                           mig == 0 & polnisch == 1 ~ 1,
                           mig == 0 & türkisch == 1 ~ 1,
                           mig == 0 & albanisch == 1 ~ 1,
                           mig == 0 ~ 0,
                           mig > 0 ~ 1) %>%
           labelled(label = "Migrationshintergrund"))
kommschreib <- kommschreib %>% sjlabelled::set_labels(mig_2, labels = c("dt" = 0, "mig" = 1))

但我仍然需要这样的情况:他们输入了“仅德语”或根本没有输入任何内容,但随后输入了另一种语言。 我想要一个针对这种情况的代码:mig == 0(因此仅指定德语)或 mig == NA 并且语言不为空。

我希望我能解释我的意思。

r case character mutate
1个回答
0
投票

假设您的数据框是:

kommschreib <- data.frame(code = c("013101", "013102", "013205", "114113", "014201", "053216"), 
                            mig = c(0, NA, 1, 2, 1, 0), 
                            englisch = c(0, 0, 1, 0, 0, 1),
                            arabisch = c(1, 0, 0, 0, 1, 0),
                            kurdisch = c(0, NA, NA, 0, 1, 0))

那么如果我理解正确的话你可以这样做:

  kommschreib1 = kommschreib %>%
                    rowwise() %>% 
                    mutate(mig2 = ifelse(mig %in% c(1, 2) | any(c_across(englisch:kurdisch) %in% 1), 
                                         1, 0))

如果孩子说“德语和另一种语言”、“家里只讲另一种语言”或者至少选中一种其他语言(否则返回 0),则将返回

1

© www.soinside.com 2019 - 2024. All rights reserved.