2016-06-23 12 views
0

I zwei Datenrahmen habe wie folgtDie Daten zwischen zwei Datensätzen, die innerhalb von zwei Wochen ist R

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 

und

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 

Ich möchte Schleife durch den Typ (A, B) von data1 und überprüfen Sie für jedes Datum und überprüfen Sie alle Einträge für Typ (A, B) in data2 und überprüfen Sie die Daten in data2, die innerhalb von zwei Wochen Lücke ist, dann summieren Sie die Werte und bringen Sie es als eine Ausgabe.

würde Mein idealer Ausgangs

 Type   date  Value 
1  A  2011-10-21  4 (3+1) 
2  A  2011-11-18  4 
3  A  2011-12-16  NA (No values for A within two weeks) 
4  B  2011-10-20  13 (12+1) 
5  B  2011-11-17  1 
6  B  2011-12-15  NA (No values for A within two weeks) 

sein, die ich schreiben eine Schleife in R und läuft durch denken. Aber es läuft lange. Ich denke, es sollte einen besseren Weg geben, dies zu tun. Ich versuche es und kann es nicht abschließen. Kann mir jemand dabei helfen?

Danke

Antwort

1

Wie sieht das aus? Unter der Annahme, wie data1df1 und data2 als df2

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")) 
Verwandte Themen