在两周内找到两个数据集之间的数据

时间:2016-06-23 01:53:20

标签: r dplyr

我有两个数据帧,如下所示,

#include<stdio.h>

int main()
{
    char a[23];
    int i=0,j=0;
    printf("enter a single english word: ");

    for(a[i]=getchar(); (a[i]!='\n') && (i<23) ; i++)
        ;

    for(j=0;j<i;j++)
        putchar(a[j]);

    printf("?");
    return 0;
}

data1
         Type         date
    1      A      2011-10-21
    2      A      2011-11-18
    3      A      2011-12-16
    4      B      2011-10-20
    5      B      2011-11-17
    6      B      2011-12-15

我想遍历data1的类型(A,B)并检查每个日期并检查data2中类型(A,B)的所有条目,并检查data2中的日期是否在两周之内,然后将值相加并将其作为输出。

我的理想输出是

data2
                 Date              Type        value
    1        2011-10-25              A           1
    2        2011-10-15              A           3
    3        2011-11-10              A           4
    4        2011-10-23              B           12
    5        2011-10-27              B           1
    6        2011-11-18              B           1

我可以考虑在R中编写循环并运行。但它运行了很长时间。我想在dplyr中应该有更好的方法来做到这一点。我正在努力而且无法完成它。有人可以帮我这么做吗?

由于

1 个答案:

答案 0 :(得分:1)

这看起来怎么样?假设data1df1data2df2

library(dplyr)
library(lubridate)
df3 <- full_join(df1, df2, by = "Type")
df3 <- df3 %>% mutate(date1 = week(date), Date1 = week(Date))
df4 <- df3 %>% mutate(Key = ifelse(((date1 - Date1) %in% c(-2:2)), T, F)) 
df5 <- df4 %>% filter(Key == T) %>% group_by(Type, date) %>% 
summarise(Value = sum(value))
full_join(df1, df5, by = c("Type", "date"))