【发布时间】:2020-04-27 03:59:22
【问题描述】:
我有两个不同的数据框(“Birth”、“Test”)。它们都有一列 ID 号(“mid.b”、“mid.t”),其中一些 ID 出现在两个数据帧中(甚至多次),并且没有其他共同的数据。它们都有一个带有日期值的列。在每个数据框中,一个 ID 可以出现多次,但 ID 号和日期的每个组合都是唯一的。
我想从“Test”数据框中的“res.num”列中获取一个值,以及来自“birth”DF 的匹配 m.event 值-如果 ID 在"mid.t" 匹配 "mid.b" 中的 id,如果 "Test" 中的日期比 "Birth" 中的日期早不超过 7 个月,则该 ID 的。
现在我已经有了计算月差的函数:
数据框示例:
mid.t<-c(628941,628979,64976)
res.num<-c("A59646","A60921","A61903")
date.t<-c("2016.12.11","2017.10.16","2018.06.13")
test<-cbind.data.frame(mid.t,res.num,date.t)
mid.b<-c(628941,628979,64976)
m.event<-c(21219464,22457757,23365285)
date.b<-c("2017.01.26","2018.02.12","2020.11.13")
birth<-cbind.data.frame(mid.b,m.event,date.b)
到目前为止,我已经有了计算月份日期间隔的函数:
mon_ymd<-function(x,y){
gap<-(as.yearmon(strptime(x, format = "%Y.%m.%d"))-as.yearmon(strptime(y, format="%Y.%m.%d")))*12
return(gap)}
还有一个非常好的代码,但不能完全运行: 我得到: if (idb == idt) { 中的错误:需要 TRUE/FALSE 的缺失值
for (idt in test$mid.t){
for (idb in birth$mid.b){
x<-birth[birth$mid.b==idb,]$date.b
y<-test[test$mid.t==idt,]$date.t
if (idb==idt){
gapmon<-mon_ymd(x,y)
if ((gapmon<=7)&(gapmon>=0)){
print(test[test$mid.t==idt,]$res.num)
}}}}
【问题讨论】:
-
有没有什么特别的部分让你卡住了?这个问题,按原样,太宽泛了,无法在这里有效地回答。最终,这感觉像是在数据库中更容易提取的东西。
-
是合并2个文件还是2个表?
-
2 个文件,但我可以把它做成 2 个表格(只有一张)
标签: r date if-statement merge nested-loops