我已经阅读了很多类似于这个的问题,但没有一个类似于我的答案。我很抱歉,如果这是多余的,我只是看不到它。用另一个数据框填充NAs,两个id变量
我有一个主数据集和一个备份数据集。当主用户有NA时,我想查看备份,如果有与full.place.name和Year匹配的值,我想用该值替换NA。
primary
是
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
是
Year Firearm.Homicide Firearm.Suicide Firearm.Unintentional full.place.name
2010 NA 1 1 Adair County, KY
2010 NA NA 0 Adams County, CO
我要的是
Year Firearm.Homicide Firearm.Suicide Firearm.Unintentional full.place.name
2010 0 1 0 Adair County, KY
2010 10 19 0 Adams County, CO
我已经试过
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")]]
但是,最后添加了五列,并没有得到任何正确的值。我也尝试了ifelse语句和FillIn,我从来没有接近过。这里有五行数据:
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")
我真的很感谢任何帮助!
他们不是互相映射现在,我怎么能做到这一点? – user5457414
您可以首先按键列对两个数据框进行排序,具体取决于它们是什么,我猜这里应该是“Year”和“full.place.name”? – Psidom