df中有五个变量:studyid、hospitalname、Date1、Date2和group。对于df中hospitalname中的每个名称,我希望提取所有组合,其中从Date1到Date2的时间段在具有group 0和group 1的组之间重叠。
library(zoo)
# create example data
df <- data.frame(
studyid = 1:5,
Date1 = as.yearmon(c("2020-01", "2020-03", "2020-10", "2020-07", "2020-06")),
Date2 = as.yearmon(c("2020-02", "2020-10", "2021-02", "2020-08", "2020-10")),
hospitalname = c("Hospital A", "Hospital A", "Hospital A", "Hospital B", "Hospital B"),
group = c(0, 1, 0, 1, 0)
)
经过分析,我希望得到这样的结果
result <- data.frame(
studyid.0 = c("3","5"),
Date1_0 = as.yearmon(c("2020-10", "2020-06")),
Date2_0 = as.yearmon(c("2021-02", "2020-10")),
studyid.1 = c("2","4"),
Date1_1 = as.yearmon(c("2020-03", "2020-07")),
Date2_1 = as.yearmon(c("2020-10", "2020-08")),
hospitalname = c("Hospital A", "Hospital B")
)
我真的很感谢你的支持。
2条答案
按热度按时间2wnc66cl1#
**inner_join()函数创建医院名称相同的行组合。接下来,使用filter()函数,您可以选择日期期间在0和1组之间重叠的行。然后,使用select()**函数重命名列以匹配您所需的输出。最后,**distinct()**函数删除由join函数创建的重复行。
或者,如@onyambu所述,您可以在inner_join()函数中添加'suffix = c(' _0 ',' _1 ')',而不是使用select():
此“后缀”意味着所有同名列的第一个数据框的后缀为“_0”,第二个数据框的后缀为“_1”。
xdyibdwo2#