У меня есть два разных фрейма данных («Рождение», «Тест»). у них обоих есть столбец идентификационных номеров ("mid.b", "mid.t") с некоторыми из идентификаторов, появляющихся в обоих фреймах данных (даже несколько раз), и никаких других общих данных. У них обоих также есть столбец со значением даты. В каждом фрейме данных идентификатор может появляться несколько раз, но каждая комбинация идентификатора и даты уникальна.
Я хотел бы получить значение из столбца "res.num" в фрейм данных «Test» с соответствующим ему значением m.event из «рождения» DF - если идентификатор в «mid.t» совпадает с идентификатором в «mid.b», и если дата в «Test» "не более чем за 7 месяцев до даты в" Рождении "этого идентификатора.
теперь у меня есть функция, которая вычисляет разрыв в месяце:
пример для фреймов данных:
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)}
и очень хороший код, который не работает полностью: я получаю: Ошибка в случае, если (idb == idt) {: пропущенное значение, где требуется ИСТИНА / ЛОЖЬ
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)
}}}}