Как эффективно создать столбец с условными именами переменных - PullRequest
0 голосов
/ 10 апреля 2019

В течение некоторого времени я создавал очень длинные 20+ строки с переименованием операторов case_when() для создания новых столбцов на основе значений одного последующего столбца.

Прямо сейчас это выглядит примерно так:

tibble(x = rep(1:3, 3), 
       y = case_when(x == 1 ~ "good", 
                     x == 2 ~ "good", 
                     x == 3 ~ "bad", 
                     TRUE ~ as.character(x)))

Но для длинных списков переменных совершенно неэффективно переименовывать / создавать новые столбцы, подобные этому. Один экземпляр имеет 4 потенциальных назначения (столбец y выше) для 3-6 переменных, поэтому много повторений.

Любой источник / идеи о том, как сделать этот процесс более эффективным?

1 Ответ

1 голос
/ 10 апреля 2019

это то, что вы ищете.Я применяю вашу классификацию к 4 столбцам одновременно, используя mutate_at:

library (dplyr)

tibble(x1 = rep(1:3, 3),
       x2 = rep(3:1, 3),
       x3 = rep(1:3, each = 3),
       x4 = rep(3:1, each = 3)) %>% 
  mutate_at(vars(c("x1", "x2", "x3", "x4")), 
            list(y = ~case_when(. %in% 1:2 ~ "good",
                               . == 3 ~ "bad", 
                               TRUE ~ as.character(.))))
    # A tibble: 9 x 8
     x1    x2    x3    x4 x1_y  x2_y  x3_y  x4_y 
  <int> <int> <int> <int> <chr> <chr> <chr> <chr>
1     1     3     1     3 good  bad   good  bad  
2     2     2     1     3 good  good  good  bad  
3     3     1     1     3 bad   good  good  bad  
4     1     3     2     2 good  bad   good  good 
5     2     2     2     2 good  good  good  good 
6     3     1     2     2 bad   good  good  good 
7     1     3     3     1 good  bad   bad   good 
8     2     2     3     1 good  good  bad   good 
9     3     1     3     1 bad   good  bad   good
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...