Unten sind zwei einfache Datenrahmen. Ich möchte die Spalten Sat1
und Sat2
neu codieren (zusammenfassen), so dass alle Grade von erfüllt sind einfach als Satisfied
codiert, und alle Grade von Unzufrieden sind als Dissatisfied
codiert. Neutral bleibt neutral. Diese Faktoren werden daher drei Ebenen haben: Satisfied, Dissatisfied, and Neutral
.Umcodieren ähnlicher Faktorebenen über mehrere Datenrahmen hinweg mit Purrr und Dplyr
Ich würde normalerweise dies durch die Datenrahmen-Bindung und unter Verwendung von lapply
zusammen mit Re-Code aus dem car
Paket, wie zum Beispiel:
DF1[2:3] <- lapply(DF1[2:3], recode, c('"Somewhat Satisfied"= "Satisfied","Satisfied"="Satisfied","Extremely Dissatisfied"="Dissatisfied"........etc, etc
Ich mag diese unter Verwendung von Kartenfunktionen erreichen, und zwar at_map
(um den Datenrahmen zu pflegen, aber ich bin neu zu purrr
so zögern Sie, andere Versionen der Karte vorzuschlagen) von purrr
, sowie dplyr
, tidyr ,
stringr and
ggplot2` so kann alles leicht pipelined werden.
Das Beispiel unten ist das, was ich erreichen möchte, aber für die Umcodierung, aber ich konnte es nicht zum Laufen bringen.
http://www.r-bloggers.com/using-purrr-with-dplyr/
Ich würde so eine ähnliche Kartenfunktion nutzen möchten at_map oder dass ich die ursprünglichen Spalten von Sat1
halten können und Sat2
, so dass die neu kodierten Spalten in den Datenrahmen und umbenannt werden hinzugefügt. Es wäre großartig, wenn dieser Schritt auch in einer Funktion enthalten wäre.
In Wirklichkeit werde ich viele Datenrahmen haben, also will ich nur die Faktorstufen einmal umcodieren und dann eine Funktion von purrr
verwenden, um die Änderungen über alle Datenrahmen mit der geringsten Menge an Code vorzunehmen.
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)
Möchten Sie alle Ihre Datenrahmen am Ende kombiniert oder in einer Liste getrennt gespeichert oder ...? Dies scheint ziemlich einfach zu sein, mit etwas wie "mutate_each" von dplyr_0.4.3.9000 kombiniert mit "map" oder "map_df". 'map_at' sieht so aus, als ob es die aktuellen Variablen ersetzt, daher ist es möglicherweise nicht das Werkzeug, das in diesem Fall verwendet wird. – aosmith
Danke für Ihre Antwort. Ich nehme an, es ist in Ordnung, wenn die Datenrahmen in einer Liste getrennt bleiben. Mein Hauptziel ist es, einen schnellen Weg (innerhalb der purrr dplyr-Pipeline) zu finden, der es mir ermöglicht, die Faktoren über mehrere Datenrahmen gleichzeitig zu rekodieren. Ich mag die Idee, mutate_each und eine Kartenfunktion zu kombinieren. Es ist in Ordnung, wenn die aktuellen Variablen ersetzt werden, da ich zuerst die Datenrahmen kopieren kann. Ich wäre Ihnen dankbar, wenn Sie den Code für Ihr Beispiel zeigen könnten. – Mike