Как превратить несколько столбцов в факторы как новые столбцы и изменить метки? - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь превратить столбцы с одинаковыми именами в новые столбцы с именами, добавляя "_fa c". В то же время я хотел бы изменить уровни фактора.

df <- data.frame(var1.1 = sample(c("0", "1"), replace = TRUE, 10),
                 var1.2 = sample(c("0", "1"), replace = TRUE, 10),
                 var2.1 = sample(c("0", "1"), replace = TRUE, 10))

Это работает:

df %>% mutate_at(vars(starts_with("var1.")),.funs = list(fac = factor)) 

 var1.1 var1.2 var2.1 var1.1_fac var1.2_fac
1      1      1      0          1          1
2      1      1      0          1          1
3      0      1      1          0          1
4      1      1      0          1          1
5      0      1      0          0          1

... но я также хотел бы изменить метки нового факторы в «нет» и «да». Я пробовал следующие варианты безрезультатно:

df %>% mutate_at(vars(starts_with("var1.")),
                 .funs = list(fac = factor(., levels = c("0", "1"), labels = c("No", "Yes"))))
df %>% mutate_at(vars(starts_with("var1.")),
                 .funs = list(fac = factor(., labels = c("No", "Yes"))))
df %>% mutate_at(vars(starts_with("var1.")),.funs = list(fac = recode_factor(., 
                                                                             `0` = "No",
                                                                             `1` = "Yes")))

1 Ответ

2 голосов
/ 02 апреля 2020

Используйте символ ~ для пересмотра аргументов factor().

df %>%
  mutate_at(vars(starts_with("var1.")), list(fac = ~ factor(., labels = c("No", "Yes"))))

#    var1.1 var1.2 var2.1 var1.1_fac var1.2_fac
# 1       0      0      1         No         No
# 2       0      1      1         No        Yes
# 3       1      0      1        Yes         No
# 4       0      1      1         No        Yes
# 5       0      1      0         No        Yes
# 6       1      0      0        Yes         No
# 7       0      0      1         No         No
# 8       0      0      1         No         No
# 9       1      1      1        Yes        Yes
# 10      1      0      0        Yes         No

Редактировать

list(fac = factor) означает поместить каждый выбранный столбец в первый аргумент factor(), но остальные аргументы остаются по умолчанию. В вашем случае вам нужно изменить аргумент labels, поэтому вам нужно создать пользовательскую функцию, тогда код будет

df %>%
  mutate_at(vars(starts_with("var1.")), list(fac = function(x){ factor(x, labels = c("No", "Yes")) }))

Синтаксис ~ является сокращением кода выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...