Создание новой переменной на основе двух других столбцов, содержащих категории с tidyverse

Я пытаюсь манипулировать данными и хочу создать новую переменную на основе двух столбцов с категориальными уровнями. Я пытался добиться этого с помощью Tidyverse, 3 способами (нужно придерживаться этой библиотеки).

Это то, что я пытался.

data_indices <- df_subs %>%
   mutate(ifelse(sex == "Female" & patient.class == "Not_Admitted", "female_not_admitted",
          ifelse(sex == "Female" & patient.class == "ORDINARY ADMISSION", "female_admitted",
          ifelse(sex == "Male" & patient.class == "Not_Admitted", "male_not_admitted",
          ifelse(sex == "Male" & patient.class == "ORDINARY ADMISSION",  "male_admitted")))))

Тем не менее, я получил ошибку:

Error in mutate_impl(.data, dots) : 
Evaluation error: argument "no" is missing, with no default.

Во-вторых, я также попытался объединить функцию в Tidyverse, но не удалось.

И наконец, в-третьих, я искал и нашел групповые индексы в той же библиотеке. Это то, что я сделал, но с треском провалился.:)

data_indices <- ds_sum_age_sex %>%
  bind_cols(Group_indic = group_indices("patient.class", "sex"))

С ошибкой:

 Error in UseMethod("group_indices_") : 
 no applicable method for 'group_indices_' applied to an object of class 
 "character"

Может кто-нибудь помочь, пожалуйста?

1 ответ

Решение

Немного сложно понять, для чего нужны функции. Но вот предположение:)

df_subs <- data.frame(sex = c("Male", 
                              "Female", 
                              "Female"),
                      patient.class = c("Not_Admitted", 
                                        "ORDINARY ADMISSION", 
                                        "ORDINARY ADMISSION"))

# Question 1
df_subs %>% 
  mutate(sex_patient_class = case_when(
    sex == "Female" & patient.class == "Not_Admitted"          ~ "female_not_admitted",
    sex == "Female" & patient.class == "ORDINARY ADMISSION"    ~ "female_admitted",
    sex == "Male"   & patient.class == "Not_Admitted"          ~ "male_not_admitted",
    sex == "Male"   & patient.class == "ORDINARY ADMISSION"    ~ "male_admitted"
  ))

# Question 2
df_subs %>% 
  unite(sex_patient_class, sex, patient.class, sep = "_")

# Question 3
df_subs %>% 
  mutate(group_indices = group_indices(., patient.class, sex))
Другие вопросы по тегам