Перекодировать несколько столбцов в фрейме данных R - PullRequest
2 голосов
/ 26 сентября 2019

Я пытаюсь преобразовать Y в 1 для ряда столбцов, которые могут измениться (например, он может увеличиться до x20).

Пример данных ниже, а также ожидаемый результат.

Data <- tibble(Date = seq.Date(as.Date('2019-01-01'),as.Date('2019-01-08'), by = "day"), 
               x1 = c("Y","","","Y","Y","","Y","Y"),
               x2 = c("","Y","Y","Y","Y","","Y","Y"))


Data_output <- tibble(Date = seq.Date(as.Date('2019-01-01'),as.Date('2019-01-08'), by = "day"), 
               x1 = c(1,0,0,1,1,0,1,1),
               x2 = c(0,1,1,1,1,0,1,1))

Ответы [ 2 ]

3 голосов
/ 26 сентября 2019

С dplyr:

Data %>% 
  mutate_at(vars(contains("x")),~case_when(.=="Y" ~1,
                                           .=="" ~0))

или по предложению @akrun просто:

Data %>% 
  mutate_at(vars(contains("x")), ~as.integer(.=="Y"))  

Результат:

# A tibble: 8 x 3
  Date          x1    x2
  <date>     <dbl> <dbl>
1 2019-01-01     1     0
2 2019-01-02     0     1
3 2019-01-03     0     1
4 2019-01-04     1     1
5 2019-01-05     1     1
6 2019-01-06     0     0
7 2019-01-07     1     1
8 2019-01-08     1     1
1 голос
/ 26 сентября 2019

В base R мы можем сделать

Data[-1] <- +( Data[-1] == "Y")
...