Ich habe viele ähnliche Fragen gelesen, aber keine von ihnen sind ähnlich genug für mich, um die Antworten funktionieren zu lassen. Ich entschuldige mich, wenn das überflüssig ist und ich es einfach nicht sehen kann.füllen Sie NAs in einem Datenrahmen mit Daten von einem anderen, zwei ID-Variablen
Ich habe einen primären Datensatz und einen Sicherungsdatensatz. Wenn der primäre eine NA hat, möchte ich die Sicherung durchsehen, und wenn es einen Wert gibt, der mit full.place.name und Year übereinstimmt, möchte ich die NA durch diesen Wert ersetzen.
primary
ist
Year Firearm.Homicide Firearm.Suicide Firearm.Unintentional full.place.name
2010 0 <NA> 0 Adair County, KY
2010 10 19 <NA> Adams County, CO
backup
ist
Year Firearm.Homicide Firearm.Suicide Firearm.Unintentional full.place.name
2010 NA 1 1 Adair County, KY
2010 NA NA 0 Adams County, CO
Was ich will, ist
Year Firearm.Homicide Firearm.Suicide Firearm.Unintentional full.place.name
2010 0 1 0 Adair County, KY
2010 10 19 0 Adams County, CO
Ich habe versucht
library(data.table)
setDT(primary); setDT(backup)
primary[is.na(primary$Firearm.Homicide), primary$Firearm.Homicide := backup[backup, primary$Firearm.Homicide, on=c("Year", "full.place.name")]]
Aber das fügte fünf Spalten bis zum Ende hinzu, und bekam keine der Werte richtig. Ich habe auch iffelse Aussagen und FillIn versucht, und ich bin nie nah gekommen. Hier sind fünf Datenzeilen:
primary<-structure(list(Year = c(2010, 2010, 2010, 2010, 2010),
Firearm.Homicide = c("0","10", "4", "3", NA), Firearm.Suicide = c(NA,"19", "5", "6",
NA), Firearm.Unintentional = c("0", NA, NA, "0", "0"), full.place.name = c("Adair County, KY",
"Adams County, CO", "Adams County, MS", "Adams County, PA", "Adams County, WI"
)), .Names = c("Year", "Firearm.Homicide", "Firearm.Suicide",
"Firearm.Unintentional", "full.place.name"), row.names = c(NA,
5L), class = "data.frame")
backup<-structure(list(Year = c(2010, 2010, 2010, 2010, 2010), Firearm.Homicide = c(NA,
NA, 4, 3, 3), Firearm.Suicide = c(1, NA, NA, NA, NA), Firearm.Unintentional = c(1,
0, 1, NA, NA), full.place.name = c("Adair County, KY", "Adams County, CO",
"Adams County, MS", "Adams County, PA", "Adams County, WI")), .Names = c("Year",
"Firearm.Homicide", "Firearm.Suicide", "Firearm.Unintentional",
"full.place.name"), row.names = c(NA, 5L), class = "data.frame")
Ich würde wirklich jede Hilfe zu schätzen wissen!
Sie sind jetzt nicht mehr aufeinander abgebildet, wie könnte ich das tun? – user5457414
Sie können beide Datenrahmen zuerst nach den Schlüsselspalten sortieren, abhängig davon, was sie sind, hier, denke ich, sollten sie "Year" und "full.place.name" sein? – Psidom