2016-06-01 5 views
1

Ich habe Datenrahmen mit zwei Variablen ID und arrival. Hier Kopf meines Datenrahmen:Subset Datenrahmen von ID, aber innerhalb von 7 Tagen

head(sun_2) 
Source: local data frame [6 x 2] 

     ID arrival 
     (chr) (dats) 
1 027506905 01.01.15  
2 042363988 01.01.15  
3 026050529 01.01.15  
4 028375072 01.01.15  
5 055384859 01.01.15  
6 026934233 01.01.15 

Wie konnte ich Daten von ID Teilmenge, die innerhalb 7 Tage ankommen hat?

+0

Innerhalb von 7 Tagen von was? Die erste Beobachtung für jede ID? Auch ein 'dput (head (sun_2))' wäre eine hilfreichere Möglichkeit, um Ihre Daten zu präsentieren. –

+4

können Sie ein Beispiel für Ihre Ausgabe angeben? Es wäre toll, reproduzieren Sie Ihre Frage nach den Richtlinien in diesem Link http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-beispiel – theArun

+0

Sorry für schlechte Post ... Ja, innerhalb von 7 Tagen nach der ersten Beobachtung. Es gibt einige Beobachtungen (gleiche IDs), die dupliziert werden, aber ich interessiere mich nur für diejenige, die innerhalb von 7 Tagen nach der ersten Beobachtung eintrifft. – zde

Antwort

0

So wie viele der anderen Leute sagten, ohne mehr Informationen (wie die ursprüngliche Beobachtung zum Beispiel aussieht) können wir nicht genau herausfinden, was Ihr Problem ist, ohne einige Annahmen zu treffen.

Ich nahm an, dass Sie eine Datenspalte haben, die das ursprüngliche Datum angibt? Und dass diese Zeilen as.Date formatiert sind.

#generate Data 
Data <- data.frame(ID = as.character(1394:2394), 
       arrival = sample(seq(as.Date('2015/01/01'), as.Date('2016/01/01'), by = 'day'), 1001, replace = TRUE)) 

# Make the "Original Observation" Variable 
delta_times <- sample(c(3:10), 1001, replace = TRUE) 
Data$First <- Data$arrival - delta_times 

das gibt mir einen Datensatz, der

ID arrival  First 
1 1394 2015-11-06 2015-10-28 
2 1395 2015-08-04 2015-07-26 
3 1396 2015-04-19 2015-04-16 
4 1397 2015-05-13 2015-05-03 
5 1398 2015-07-18 2015-07-11 
6 1399 2015-01-08 2015-01-03 

wie folgt aussieht Wenn das der Fall ist, dann ist die Lösung difftime zu verwenden, etwa so:

# Now we need to make a subsetting variables 
Data$diff_times <- difftime(Data$arrival, Data$First, units = "days") 
Data$diff_times 

within_7 <- subset(Data, diff_times <=7) 

max(within_7$diff_times) 
Time difference of 7 days 
0

Es ist ein bisschen schwer, sicher zu sein angesichts der Informationen, die Sie zur Verfügung gestellt haben, aber ich denke, Sie könnten es so machen:

library(dplyr) 
dt %>% group_by(ID) %>% filter(arrival < min(arrival) + 7) 
+0

Thx! Das ist genau das, was ich tun wollte ... Es funktioniert! – zde

+0

Könnten Sie bitte etwas mehr darüber erklären, wie das funktioniert? – StatsSorceress

+0

Ich denke, Sie leiten das Ergebnis des Befehls 'group_by' an den Befehl' filter', aber ich dachte, dass jede ID eindeutig ist, also weiß ich nicht, wie 'group_by' in diesem Fall funktioniert? – StatsSorceress