Ниже представлены два простых кадра данных. Я хотел бы перекодировать (свернуть) столбцы Sat1
и Sat2
так, чтобы все степени удовлетворенности были закодированы просто как Satisfied
, а все степени неудовлетворенности закодированы как Dissatisfied
. Нейтральный будет оставаться нейтральным. Следовательно, эти факторы будут иметь три уровня - Satisfied, Dissatisfied, and Neutral
.Перекодирование аналогичных уровней уровня в нескольких кадрах данных с использованием Purrr и Dplyr
я обычно сделать это путем привязки кадров данных, и с помощью lapply
вместе с перекодировкой из car
пакета, такие как:
DF1[2:3] <- lapply(DF1[2:3], recode, c('"Somewhat Satisfied"= "Satisfied","Satisfied"="Satisfied","Extremely Dissatisfied"="Dissatisfied"........etc, etc
Я хотел бы сделать это, используя функцию карты, в частности, at_map
(для сохранения фрейма данных, но я новичок в purrr
, поэтому не стесняйтесь предлагать другие варианты карты) от purrr
, а также dplyr
, tidyr ,
stringr and
ggplot2`, поэтому все может быть легко конвейерным.
Пример ниже - это то, что я хотел бы выполнить, но для повторного кодирования, но я не смог заставить его работать.
http://www.r-bloggers.com/using-purrr-with-dplyr/
Я хотел бы использовать at_map или аналогичную функцию карты, так что я могу сохранить исходные столбцы Sat1
и Sat2
, поэтому повторно кодированные столбцы будут добавлены в кадр данных и переименован. Было бы здорово, если бы этот шаг также можно было включить в функцию.
В действительности у меня будет много кадров данных, поэтому я хочу только один раз перекодировать уровни факторов, а затем использовать функцию от purrr
, чтобы внести изменения во все кадры данных с использованием наименьшего количества кода.
Names<-c("James","Chris","Jessica","Tomoki","Anna","Gerald")
Sat1<-c("Satisfied","Very Satisfied","Dissatisfied","Somewhat Satisfied","Dissatisfied","Neutral")
Sat2<-c("Very Dissatisfied","Somewhat Satisfied","Neutral","Neutral","Satisfied","Satisfied")
Program<-c("A","B","A","C","B","D")
Pets<-c("Snake","Dog","Dog","Dog","Cat","None")
DF1<-data.frame(Names,Sat1,Sat2,Program,Pets)
Names<-c("Tim","John","Amy","Alberto","Desrahi","Francesca")
Sat1<-c("Extremely Satisfied","Satisfied","Satisfed","Somewhat Dissatisfied","Dissatisfied","Satisfied")
Sat2<-c("Dissatisfied","Somewhat Dissatisfied","Neutral","Extremely Dissatisfied","Somewhat Satisfied","Somewhat Dissatisfied")
Program<-c("A","B","A","C","B","D")
DF2<-data.frame(Names,Sat1,Sat2,Program)
Вы хотите, чтобы все ваши кадры данных были объединены в конце или сохранены в списке отдельно или ...? Это выглядит довольно просто с чем-то вроде 'mutate_each' от dplyr_0.4.3.9000 в сочетании с' map' или 'map_df'. 'map_at' похоже, что он заменяет текущие переменные, поэтому не может быть инструментом для использования в этом случае. – aosmith
Спасибо за ваш ответ. Я полагаю, что это нормально, если кадры данных остаются в списке отдельно. Моя главная цель - найти быстрый способ (в конвейере purrr dplyr), который позволит мне перекодировать факторы в нескольких кадрах данных за один раз. Мне нравится идея объединения mutate_each и функции карты. Это нормально, если текущие переменные заменяются, поскольку я могу просто сделать копии кадров данных в первую очередь. Поэтому я был бы признателен, если бы вы могли показать код для своего примера. – Mike