0

この質問の仕方がよくわからないので、ご容赦ください。

私が使用しているデータセット、ANES 累積ファイルにエラーがあることに気付きました。データセットの 1 年 (2004 年) では、1 つの変数 (名前を「grewup」に変更しました) の値が誤って省略されていたため、その年は単に「NA」と表示されています。値は他の年にも存在するため、データセットは基本的に次のようになります。

id   year   grewup
1    2002   127
2    2002   310
3    2004   NA
4    2004   NA
5    2008   332
6    2008   614

2004年だけで構成され、「grewup」の値が欠落している別のデータセットがあります。私がやりたいことは、2 番目のデータセットの値を使用して 2004 年の NA を再コード化することです。どうすればいいですか?繰り返しますが、値は残りの年の累積データセットにあります。2004 用に再コーディングし、残りの値はそのままにしておきたいだけです。

ありがとう。

いくつかの説明と追加:

  • この 1 つの変数のみを 2 番目のデータセットから取得して、最初のデータセットがさらに大規模になり、メモリを大量に消費することを回避したいと考えています (951 列)。実際には、私がすでに持っている変数が他にもたくさんあります

  • また、2004 年の値はすべて NA ですが、データセット内のすべての NA が 2004 年の値であるとは限りません。他の年の値には、正当に欠落している値がいくつかあります。

4

1 に答える 1

0

これらのデータフレームを ID と年でマージできるはずです。

 merge(dat1,dat2,by=c("id", "year"),all.x=TRUE)  # and "outer join"
  id year grewup.x grewup.y
1  1 2002      127       NA
2  2 2002      310       NA
3  3 2004       NA      438
4  4 2004       NA      834
5  5 2008      332       NA
6  6 2008      614       NA
 datm <- merge(dat1,dat2,by=c("id", "year"),all.x=TRUE)

 # No "fill in the blanks
 datm[is.na(datm$grewup.x), "grewup.x"] <- datm[is.na(datm$grewup.x), "grewup.y"] 
 # Notice that the logical index is the same on both sides of the assignment

 datm[ ! names(datm) %in% 'grewup.y' ]  # drop the supplementary column

  id year grewup.x
1  1 2002      127
2  2 2002      310
3  3 2004      438
4  4 2004      834
5  5 2008      332
6  6 2008      614
于 2014-04-09T23:05:17.337 に答える