У меня есть два dataframes 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) перед слиянием в R?
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
, но никто, кажется, сделать трюк.
Проблема, с которой я сталкиваюсь, заключается в том, что моей заменой было другое количество строк, чем данные, и что «длина длинного объекта не кратна короткой длине объекта».
Есть ли причина, по которой все значения являются символами? Почему дата - это не просто цифры? –
Нет причин в частности. Также могут быть даты. Просто, чтобы сделать это проще, но если это повлияет на решение, я должен, конечно, изменить его ... – dahved
Как 'c (" 2015 "," 2011 "," 2014 "," 2015 ")' проще, чем просто ' (2015,2011,2014,2015) '? –