使用 tidyverse 基于现有变量创建一个新变量

时间:2021-01-12 04:16:30

标签: r tidyverse

我想在我的数据集“data2”(见下表)中创建一个包含 4 个类别(黑人/拉丁裔/白人/其他)的新变量“种族”。
我要申请的条件是:

  1. 任何表示“西班牙裔或拉丁裔”的人都被编码为拉丁裔,无论他们是否表示其他种族选项。
  2. 那些表示'黑色'(仅)的人将被编码为黑色
  3. 那些表示'白色'(仅)的人将被编码为白色
  4. 那些表示“亚洲人”或“美洲原住民”,或“其他人”,或表示多个选项(西班牙裔或拉丁裔除外)的人将被编码其他

我想使用 mutatecase_when 函数按照上述条件创建一个新变量 race

race_1 - 亚洲
Race_2 - 黑色
Race_3 - 西班牙裔或拉丁裔
Race_4 - 美洲原住民
Race_5 - 白
Race_6 - 其他

<头>
race_1 race_2 race_3 race_4 race_5 race_6
不适用 1 不适用 不适用 不适用 不适用
不适用 不适用 1 不适用 不适用 不适用
不适用 不适用 1 不适用 不适用 不适用
1 不适用 1 不适用 1 不适用
不适用 不适用 不适用 不适用 1 不适用
不适用 不适用 1 不适用 不适用 不适用

1 个答案:

答案 0 :(得分:0)

dat %>%
  # convert `NA` to false, all others to true ... verify this is what you want
  mutate_at(vars(starts_with("race_")), ~ !is.na(.)) %>%
  # provide a variable that lists how many races were selected
  mutate(combined = rowSums(across(starts_with("race_")))) %>%
  mutate(race = case_when(
    race_3                 ~ "Latino",
    race_2 & combined == 1 ~ "Black",
    race_5 & combined == 1 ~ "White",
    TRUE                   ~ "Others")
  )
#   race_1 race_2 race_3 race_4 race_5 race_6 combined results
# 1  FALSE   TRUE  FALSE  FALSE  FALSE  FALSE        1   Black
# 2  FALSE  FALSE   TRUE  FALSE  FALSE  FALSE        1  Latino
# 3  FALSE  FALSE   TRUE  FALSE  FALSE  FALSE        1  Latino
# 4   TRUE  FALSE   TRUE  FALSE   TRUE  FALSE        3  Latino
# 5  FALSE  FALSE  FALSE  FALSE   TRUE  FALSE        1   White
# 6  FALSE  FALSE   TRUE  FALSE  FALSE  FALSE        1  Latino