r 查找函数返回负日期
r lookup function returning negative dates
我是 R 的新手
我有一个 table 缺少一些数据,我想从参考 table 中更新这些数据。
样本数据table:
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)))
样本查询 table:
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"]<-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
这是解决此问题的一般正确方法吗?如果是这样,知道为什么要返回负数以及我可以做些什么来解决它吗?如果没有,请提出正确方法的任何建议。
您可以使用库 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
我是 R 的新手
我有一个 table 缺少一些数据,我想从参考 table 中更新这些数据。
样本数据table:
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)))
样本查询 table:
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"]<-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
这是解决此问题的一般正确方法吗?如果是这样,知道为什么要返回负数以及我可以做些什么来解决它吗?如果没有,请提出正确方法的任何建议。
您可以使用库 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