2017-05-29 3 views
0

Hier ein Beispiel für meine data.frame erstellen:data.frame Erweitern von Duplikaten anhand von Gruppen Bedingung

df = read.table(text = 'ID Day Count Count_group 
1001 1933 6 11 
1002 1933 6 11 
1003 1933 6 11 
1004 1933 6 11 
1005 1933 6 11 
1006 1933 6 11 
1007 1932 5 8 
1008 1932 5 8 
1009 1932 5 8 
1010 1932 5 8 
1011 1932 5 8 
1012 1931 3 4 
1013 1931 3 4 
1014 1931 3 4 
1015 1930 1 1 
1016 1800 6 10 
1017 1800 6 10 
1018 1800 6 10 
1019 1800 6 10 
1020 1800 6 10 
1021 1800 6 10 
1022 1799 4 6 
1023 1799 4 6 
1024 1799 4 6 
1025 1799 4 6 
1026 1798 2 2 
1027 1798 2 2 
1028 888  4 6 
1029 888  4 6 
1030 888  4 6 
1031 888  4 6 
1032 887  2 3 
1033 887  2 3 
1034 886  1 2 
1035 885  1 1', header = TRUE) 

Die Count col zeigt die Gesamtzahl der ID Werte für jeden Day und der Count_group col zeigt die Summe der ID Werte pro Stück Day und Day - 1.

z.B. 1933 = Count_group 11 weil Count 6 (1933) + Count 5 (1932), und so weiter.

Was ich tun müssen, um duplizierten Beobachtungen für jeden Count_group erstellen und fügen Sie sie, um sie für jeden Count_group seine Day UND Day - 1 zu zeigen.

z.B. Count_group = 11 durch die Count Werte von Day 1933 und 1932 beide Tage braucht also besteht in der Count_group = 11. die nächste aufgenommen werden sollen, Count_group = 8, komponiert von 1932 und 1931 sein, etc ...

Erwartete Ausgabe:

ID  Day Count Count_group 
1001 1933 6 11 
1002 1933 6 11 
1003 1933 6 11 
1004 1933 6 11 
1005 1933 6 11 
1006 1933 6 11 
1007 1932 5 11 
1008 1932 5 11 
1009 1932 5 11 
1010 1932 5 11 
1011 1932 5 11 
1007 1932 5 8 
1008 1932 5 8 
1009 1932 5 8 
1010 1932 5 8 
1011 1932 5 8 
1012 1931 3 8 
1013 1931 3 8 
1014 1931 3 8 
1012 1931 3 4 
1013 1931 3 4 
1014 1931 3 4 
1015 1930 1 4 
1015 1930 1 1 
1016 1800 6 10 
1017 1800 6 10 
1018 1800 6 10 
1019 1800 6 10 
1020 1800 6 10 
1021 1800 6 10 
1022 1799 4 10 
1023 1799 4 10 
1024 1799 4 10 
1025 1799 4 10 
1022 1799 4 6 
1023 1799 4 6 
1024 1799 4 6 
1025 1799 4 6 
1026 1798 2 6 
1027 1798 2 6 
1026 1798 2 2 
1027 1798 2 2 
1028 888 4 6 
1029 888 4 6 
1030 888 4 6 
1031 888 4 6 
1032 887 2 6 
1033 887 2 6 
1032 887 2 3 
1033 887 2 3 
1034 886 1 3 
1034 886 1 2 
1035 885 1 2 
1035 885 1 1 

Sie Vorschläge haben Sie?

+0

ok, werde ich weitere Informationen hinzufügen. danke – aaaaa

+0

@akrun info wurde hinzugefügt. Danke – aaaaa

+0

Danke, war beschäftigt mit anderen Sachen :-) Dies bedeutet, dass der 'Tag' ist keine Gruppierungsvariable – akrun

Antwort

1

Ich denke, das tut, was Sie brauchen ...

#first add a grouping variable 
df$daygroup <- c(0,cumsum(sapply(2:nrow(df),function(i) df$Day[i]!=df$Day[i-1]))) 

#split df into a list of data frames, loop through them to add extra rows, 
#and bind them back together 
df2 <- do.call(rbind,lapply(split(df,df$daygroup),function(x){ 
    n <- nrow(x) 
    m <- x$Count_group[1] #number of rows needed for Day 
    if(m>n){ 
    y <- rbind(x,data.frame(ID=(x$ID[n]+1):(x$ID[n]+m-n), #continue numbering 
          Day=x$Day[1]-1, #previous day 
          Count=m-x$Count[1], #difference in count 
          Count_group=m, 
          daygroup=x$daygroup[1])) 
    } else { 
    y <- x #no extra rows needed 
    } 
    return(y) 
} 
)) 
df2$daygroup <- NULL #remove grouping variable 


head(df2,20) #ignore the rownames! 
     ID Day Count Count_group 
0.1 1001 1933  6   11 
0.2 1002 1933  6   11 
0.3 1003 1933  6   11 
0.4 1004 1933  6   11 
0.5 1005 1933  6   11 
0.6 1006 1933  6   11 
0.7 1007 1932  5   11 
0.8 1008 1932  5   11 
0.9 1009 1932  5   11 
0.10 1010 1932  5   11 
0.11 1011 1932  5   11 
1.7 1007 1932  5   8 
1.8 1008 1932  5   8 
1.9 1009 1932  5   8 
1.10 1010 1932  5   8 
1.11 1011 1932  5   8 
1.1 1012 1931  3   8 
1.2 1013 1931  3   8 
1.3 1014 1931  3   8 
2.12 1012 1931  3   4 
+0

Hallo, vielen Dank. Ich habe die Frage aktualisiert und es sollte sehr einfach für Sie sein, den Code anzupassen. 1) Was ist, wenn ich ID-Werte nicht in der Reihenfolge habe und die innerhalb eines anderen Tages wiederholen können? 2) Wie kann ich den Code an verschiedene Daten anpassen, die unterschiedliche Zeitfenster als Gruppierungsbedingung berücksichtigen? d. h. welcher Teil Ihres Codes sollte ich ändern und wie. danke – aaaaa

+0

neue Frage hier https://stackoverflow.com/questions/44242299/expand-data-frame-by-creating-duplicates-based-on-group-condition-2 danke .. – aaaaa

+1

Ich habe eine Antwort auf Ihre hinzugefügt neue Frage zum ersten Teil re ID-Werte. Für längere Zeit bin ich nicht klar, wie die korrekte Ausgabe aussehen würde. –