我有以下问题:我有两个数据框。 df1
除其他变量(在下面的代码中未显示)之外,还包含一个日期变量。在df2
中,我有一个ID(指表df1
中的ID),一个因子变量(类型)和另一个日期。
df1 <- data.frame(id=1:5, referenceDate=c("2018-01-20","2018-02-03","2018-05-20", "2018-08-01", "2018-07-31"))
df2 <- data.frame(id=c(1,1,1,2,2,4,4,5,5), type=c("A", "A", "B", "A", "A", "B", "A", "B", "B"), dates=c("2018-01-10", "2018-01-23", "2018-01-24", "2018-05-21", "2018-05-18", "2018-06-01", "2018-09-01", "2018-07-10", "2018-07-20"))
我的目标是在df1
中创建一个新列,指示df2
中的行数,其中df2$type
=='A'和df2$dates
出现在df1$referenceDate
。
在R中,我有以下解决方案,可为我提供df2$type
=='A'的行数。但是我该如何考虑日期呢?我的想法是先将两个表连接起来,以便将referenceDate
的{{1}}变量转换为df1
,然后进行计数,然后再朝另一个方向将两个表连接起来(为了使count变量返回到df2
中)。但这对我来说听起来并不优雅。
df1
答案 0 :(得分:0)
我想这可能是您想要的:
df1 <- tibble(id = 1:5,
referenceDate = as.Date(c("2018-01-20","2018-02-03","2018-05-20", "2018-08-01", "2018-07-31")))
df2 <- tibble(id = c(1,1,1,2,2,4,4,5,5),
type = c("A", "A", "B", "A", "A", "B", "A", "B", "B"),
dates = as.Date(c("2018-01-10", "2018-01-23", "2018-01-24", "2018-05-21", "2018-05-18", "2018-06-01", "2018-09-01", "2018-07-10", "2018-07-20")))
df1 %>%
left_join(
df2 %>%
left_join(df1, by = 'id') %>%
filter(dates < referenceDate) %>%
group_by(id) %>%
count(type) %>%
ungroup(),
by = 'id'
)
关键是首先将df1
和df2
连接到{em> ,然后根据参考日期进行过滤。这样,您就可以使用filter
保留想要的内容。然后,使用count
。 然后重新加入df1