これに似た質問をたくさん読んだことがありますが、私はこれが冗長で、私はそれを見ることができない場合は謝罪します。別の2つのid変数からのデータで1つのデータフレーム内のNAsを入力してください
私はプライマリデータセットとバックアップデータセットを持っています。プライマリに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
である私は
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")]]
を試してみた
Year Firearm.Homicide Firearm.Suicide Firearm.Unintentional full.place.name
2010 0 1 0 Adair County, KY
2010 10 19 0 Adams County, CO
です
しかし、最後に5列が追加され、値が正しく取得されませんでした。私もifelseステートメントとFillInを試してきました。 5行のデータがあります:
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
両方のデータフレームをキー列で最初に並べ替えることができます。その内容は「年」と「full.place.name」であるはずです。 – Psidom