【发布时间】:2015-11-17 08:59:39
【问题描述】:
我有两个数据框 df.o 和 df.m,定义如下。我需要根据两个标准找到df.o(维度表)中的哪些观察对应于df.m(事实表)中的哪些观察:1)df.o$Var1==df.o$Var1和df.o$date1 < df.m$date2 < df.o$date3这样我得到df.o$oID的正确值在df.m$oID 中(在df.m$CORRECToID 中手动输入正确的值)。之后我需要 ID 才能完成合并。
df.o <- data.frame(oID=1:4,
Var1=c("a","a","b","c"),
date3=c(2015,2011,2014,2015),
date1=c(2013,2009,2012,2013),
stringsAsFactors=FALSE)
df.m <- data.frame(mID=1:3,
Var1=c("a","a","b"),
date2=c(2014,2010,2013),
oID=NA,
CORRECToID=c(1,2,3),
points=c(5, 10,15),
stringsAsFactors=FALSE)
我尝试了各种组合,例如下面的代码,但没有运气:
df.m$oID[df.m$date2 < df.o$date3 & df.m$date2 > df.o$date1 & df.o$Var1==df.m$Var1] <- df.o$oID
我也尝试过使用ifelse、which 和match 的各种组合,但似乎没有一个能奏效。
我一直遇到的问题是我的替换行数与数据不同,并且“较长的对象长度不是较短对象长度的倍数”。
【问题讨论】:
-
所有值都是字符有什么原因吗?为什么日期不只是数字?
-
没有特别的原因。也可以是日期。只是为了让它更简单,但如果它影响解决方案,我当然应该改变它......
-
c("2015","2011","2014","2015")比(2015,2011,2014,2015)简单吗? -
你是对的 - 只是改变了它。
标签: r merge match data.table