Использование функции dplyr mutate для замены нескольких значений - PullRequest
0 голосов
/ 18 июня 2020

В следующих данных уровни для обеих переменных закодированы численно

dat = read.csv("https://studio.edx.org/c4x/HarvardX/PH525.1x/asset/assoctest.csv")
head(dat)

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

dat_char = mutate(dat, allele=replace(allele, allele==0, "AA/Aa")) %>% 
mutate(allele=replace(allele, allele==1, "aa")) %>%
mutate(case=replace(case, case==0, "control")) %>%
mutate(case=replace(case, case==1, "case"))

Приведенный выше код работает отлично, но его сложно писать постоянно. Я уверен, что есть способ выполнить некоторые из этих замен одновременно и уменьшить размер кода, но я не уверен, как это сделать. Например, я пробовал использовать векторы в качестве значений поиска и замены.

dat_char = mutate(dat, allele=replace(allele, allele==c(0,1), c("AA/Aa", "aa"))) %>%
mutate(case=replace(case, case==c(0,1),  c("control", "case")))
head(dat_char)

Это просто беспорядок, но дает представление о том, чего я пытаюсь достичь.

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Вы можете использовать здесь простой ifelse, но если у вас есть несколько значений для замены, вы можете рассмотреть recode или case_when:

library(dplyr)

dat %>%
  mutate(allele = recode(allele, `0` = 'AA/Aa', `1` = 'aa'), 
         case = recode(case, `0` = 'control', `1` = 'case'))
0 голосов
/ 18 июня 2020

Это также может сработать:

library(dplyr)

dat_char <- mutate(dat,
                   allele = factor(allele,
                                   levels = c(0, 1),
                                   labels = c("AA/Aa", "aa")),
                   case = factor(case,
                                 levels = c(0, 1),
                                 labels = c("control", "case")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...