-1

私はRが初めてです。

参照テーブルから更新したいデータが欠落しているテーブルがあります。

サンプル データ テーブル:

df1=data.frame(id=c(1:5),dob=as.Date(c("1/1/2001"
     ,"2/2/2002",NA,NA,NA),"%m/%d/%Y"),other_data=paste0("data",seq(1:5)))

ルックアップ テーブルの例:

 bd_ref<-data.frame(id=c(1:100),dob=as.Date(rep("1/1/1999"),"%m/%d/%Y"))

結果は次のようになります。

  id dob             other_data
1  1 2001-01-01      data1
2  2 2002-02-02      data2
3  3 1999-01-01      data3
4  4 1999-01-01      data4
5  5 1999-01-01      data5

最初に欠落しているデータを特定し、次にlookupこの回答に基づいて qdapTools パッケージの関数を使用しようとしました 次のようにRデータフレームに値を挿入する単純なルックアップ:

df1[is.na(df1$dob),"dob"]<-df1[is.na(df1$dob),"id"] %l% d_ref[,c("id","dob")]

しかし、エラーが発生しました:

Error in as.Date.numeric(value) : 'origin' must be supplied

の結果はdf1[is.na(df1$dob),"id"] %l% d_ref[,c("id","dob")]日付ではなく負の数のようです

[1] -719144 -719144 -719144

これは、この問題を解決するための一般的な正しいアプローチですか? もしそうなら、負の数が返される理由とそれを修正するために何ができるか考えていますか? そうでない場合は、正しいアプローチの提案。

4

1 に答える 1

1

library でこのようなことを試すことができますdplyr。各行を実行して、ステップで何が起こっているかを確認することをお勧めします。

library(dplyr)
df <- inner_join(df1, bd_ref, by = 'id')
df$dob.x <- as.Date(ifelse(!is.na(df$dob.x), df$dob.x, df$dob.y), origin = '1970-01-01')
df <- select(df, -dob.y)
names(df)[2] <- 'dob'
df
  id        dob other_data
1  1 2001-01-01      data1
2  2 2002-02-02      data2
3  3 1999-01-01      data3
4  4 1999-01-01      data4
5  5 1999-01-01      data5
于 2016-02-26T05:16:28.283 に答える