Ich habe einen Datenrahmen von Personen und ihren Ehepartnern mit einigen persönlichen Informationen (d. H. Nachnamen), die ich mit plyr :: mapvalues zum Schutz von Identitäten randomisiert habe. Hier ist ein reproduzierbares Beispiel dafür, wie es aussah vor und nach dem Namen zu ändern:Erneutes Auffüllen der Spalte in einem relationalen Datenrahmen nach der Randomisierung in R
# before
d <- data.frame(id = c(1:6),
first_name = c('Jeff', 'Marilyn', 'Gwyn',
'Alice', 'Sam', 'Sarah'),
surname = c('Goldbloom', 'Monroe', 'Paltrow', 'Goldbloom',
'Smith', 'Silverman'),
spouse_id = c(2, 1, 1, 5, 4, "NA"),
spouse = c('Marilyn Monroe', 'Jeff Goldbloom', 'Jeff Goldbloom',
'Sam Smith', 'Alice Goldbloom', 'NA'))
d
> id first_name surname spouse_id spouse
1 Jeff Goldbloom 2 Marilyn Monroe
2 Marilyn Monroe 1 Jeff Goldbloom
3 Gwyn Paltrow 1 Jeff Goldbloom
4 Alice Goldbloom 5 Sam Smith
5 Sam Smith 4 Alice Goldbloom
6 Sarah Silverman NA NA
# replacement names to serve as surnames (doesn't matter what they are, just
that the ratios remain the same as before; mapvalues takes care of this)
repnames <- c("Arman" , "Clovis" , "Garner" , "Casey" , "Birch")
s <- unique(d$surname)
d$surname <- plyr::mapvalues(d$surname, from = s, to = repnames) #replace surnames
# After replacement, the dataframe looks like:
d
> id first_name surname spouse_id spouse
1 Jeff Arman 2 Marilyn Monroe
2 Marilyn Clovis 1 Jeff Goldbloom
3 Gwyn Garner 1 Jeff Goldbloom
4 Alice Arman 5 Sam Smith
5 Sam Casey 4 Alice Goldbloom
6 Sarah Birch NA NA
Jeder Mensch hat seine eigene id
Nummer, aber nicht alle Menschen haben Ehegatten. Wenn eine Person einen Ehepartner hat, wird die Person ihres Ehepartners id
in der Spalte spouse_id
wiedergegeben. Ich tat dies, damit ich Einzelpersonen und ihre Ehegatten später mit etwas wie dplyr::filter(d, spouse %in% spouse_id)
getrennt filtern konnte.
Meine Frage ist, wie kann ich die relationalen id
und spouse_id
Spalten verwenden, um die Spalte wieder zu füllen, so dass es die neuen, randomisierten Nachnamen widerspiegelt? das heißt, die endgültige würde erwartete Ausgabe sein:
id first_name surname spouse_id spouse
1 Jeff Arman 2 Marilyn Clovis
2 Marilyn Clovis 1 Jeff Arman
3 Gwyn Garner 1 Jeff Arman
4 Alice Arman 5 Sam Casey
5 Sam Casey 4 Alice Arman
6 Sarah Birch NA NA
... So werden einige Verkettung an den first_name
und surname
Spalten beteiligt sein. Ich habe noch nie etwas so bedingtes in R gemacht - in Excel denke ich, es wäre verschachtelte SVERWEIS-Funktionen ...
Danke, tut mir leid, es ist so spezifisch, aber hoffentlich stellt es eine lustige Herausforderung für jemanden da draußen.
Können Sie die erwartete Ausgabe zeigen? – akrun
@akrun Sorry, jetzt korrekt bearbeitet! – Von
Sind auch Ihre NA Strings oder tatsächlichen NAs? In Ihrem Beispiel sind Strings – Sotos