Преобразование всех двоичных (0, 1, NA) переменных в факторы - PullRequest
2 голосов
/ 28 марта 2020

У меня есть большой набор данных размером ~ 15 000 x 1500, который я загрузил из файла SPSS .sav. Большинство переменных помечены, даже непрерывные. Я хотел бы взять все переменные, которые явно являются факторами (то есть те, которые имеют только значения 0, 1 и NA) и использовать функцию to_factor(), чтобы превратить их в факторы. Я пытался выяснить условие mutate_if(), которое оценило бы true для всех переменных только с уникальными значениями (0, 1, NA), но я застрял.

library(tidyverse)

df <- tibble(X1 = rnorm(50), X2 = rnorm(50), X3 = rnorm(50), 
             X4 = sample(c(0,1), 50, replace = TRUE),
             X5 = sample(c(0,1), 50, replace = TRUE), 
             X6 = rnorm(50), X7 = sample(c(0,1), 50, replace = TRUE))

# Here's a hacky way that I tried, doesn't work

df %>%
   mutate_if(sum(unique(.), na.rm = TRUE) == 1, ~ as.factor(.x))

1 Ответ

2 голосов
/ 28 марта 2020

Мы можем передать два условия в mutate_if - проверить, что столбец имеет цифры c (is.numeric) и all, значения unique равны %in% 0, 1 или NA - чтобы выбрать столбцы и затем преобразовать его в factor класс

library(dplyr)
df %>%
      mutate_if(~ is.numeric(.) && all(unique(.) %in% c(0, 1, NA)), factor)
# A tibble: 10 x 5
#         X1 X2    X3       X4 X5   
#      <dbl> <fct> <chr> <int> <fct>
# 1 -0.546   1     a        18 1    
# 2  0.537   1     b         1 1    
# 3  0.420   1     c         5 1    
# 4 -0.584   1     d        20 0    
# 5  0.847   1     e        11 0    
# 6  0.266   0     f        14 1    
# 7  0.445   1     g         6 1    
# 8 -0.466   <NA>  h         6 0    
# 9 -0.848   <NA>  i        14 0    
#10  0.00231 1     j         3 1    

данные

set.seed(24)
df <- tibble(X1 = rnorm(10), X2= sample(c(1, 0, NA), 10, replace = TRUE), X3 = letters[1:10], X4 = sample(20, 10,  replace = TRUE), X5 = sample(c(1, 0), 10, replace = TRUE))
...