r查找函数返回负日期

时间:2016-02-26 02:07:21

标签: r lookup-tables qdap

我是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

我首先确定了缺失的数据,然后根据此答案Simple lookup to insert values in an R data frame尝试使用qdapTools包中的lookup函数,如下所示:

df1 [is.na(df1 $ dob),“dob”]&lt; -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

这是解决这个问题的正确方法吗?如果是这样,任何想法为什么负数被退回以及我能做些什么来解决它?如果没有,任何关于正确方法的建议。

1 个答案:

答案 0 :(得分:1)

您可以使用库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