2017-06-16 3 views
0

Nachfolgendes Beispiel Linien einiger Daten zur Gruppe I haben:Wie durch aufeinanderfolgende Zeilen in R

A B participant trial CURRENT_ID  C 
0 1 ppt01   45  3    0 #row1 
1 0 ppt01   45  4    0 #row2 
0 1 ppt01   45  10    0 #row3 
0 0 ppt01   45  11    0 #row4 
1 0 ppt01   45  12    0 #row5 
0 1 ppt01   87  2    0 #row6 
1 0 ppt01   87  3    0 #row7 
1 1 ppt01   87  4    1 #row8 
1 1 ppt01   87  5    1 #row9 
0 1 ppt02   55  5    0 #row10 
1 0 ppt02   55  6    0 #row11 
0 1 ppt02   55  9    0 #row12 
1 0 ppt02   55  10    0 #row13 
0 1 ppt02   55  11    1 #row14 
1 0 ppt02   55  12    0 #row15 

ich zu einer Gruppe müssen die Daten durch Teilnehmer, Versuch und aufeinanderfolgende Reihen von CURRENT_ID. Die aufeinanderfolgenden Zeilen von CURRENT_ID müssen jedoch von Teilnehmer und Test berücksichtigt werden und müssen möglicherweise zweimal berücksichtigt werden. Hier ein Beispiel, wie ich die aufeinanderfolgenden Zeilen betrachten muss. Wie Sie sehen können, müssen einige Zeilen zweimal berücksichtigt werden (zB Teilnehmer ppt01, Versuch 45, CURRENT_ID 11), mit der vorhergehenden und folgenden Zeile:

A B participant trial CURRENT_ID  C 
0 1 ppt01   45  3    0 #row1 
1 0 ppt01   45  4    0 #row2 

0 1 ppt01   45  10    0 #row3 
0 0 ppt01   45  11    0 #row4 

0 0 ppt01   45  11    0 #row4 
1 0 ppt01   45  12    0 #row5 

0 1 ppt01   87  2    0 #row6 
1 0 ppt01   87  3    0 #row7 

1 0 ppt01   87  3    0 #row7 
1 1 ppt01   87  4    1 #row8 

1 1 ppt01   87  4    1 #row8 
1 1 ppt01   87  5    1 #row9 

0 1 ppt02   55  5    0 #row10 
1 0 ppt02   55  6    0 #row11 

0 1 ppt02   55  9    0 #row12 
1 0 ppt02   55  10    0 #row13 

1 0 ppt02   55  10    0 #row13 
0 1 ppt02   55  11    1 #row14 

0 1 ppt02   55  11    1 #row14 
1 0 ppt02   55  12    0 #row15 

Wie die aufeinanderfolgenden Reihen von CURRENT_ID enthalten in library(dplyr)group_by(participant,trial)?

+1

Wie beurteilen Sie die Daten neu zu organisieren wollen? –

+0

Wjy sind A, B, C, und die # Kommentare dort? Warum wird speziell 11 verdoppelt? – lukeA

+0

Ich möchte group_by die Daten, weil ich dann einige Berechnungen mit den Spalten A, B und C basierend auf der Gruppierung nach Teilnehmer, Test und aufeinanderfolgenden Zeilen von CURRENT_ID vornehmen müssen. – dede

Antwort

0

Sie nicht wissen, wie es mit dplyr zu tun, aber hier ist ein Ansatz in der Basis R:

# data 
dat <- structure(list(A = c(0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 
1L, 0L, 1L, 0L, 1L), B = c(1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 
1L, 0L, 1L, 0L, 1L, 0L), participant = c("ppt01", "ppt01", "ppt01", 
"ppt01", "ppt01", "ppt01", "ppt01", "ppt01", "ppt01", "ppt02", 
"ppt02", "ppt02", "ppt02", "ppt02", "ppt02"), trial = c(45L, 
45L, 45L, 45L, 45L, 87L, 87L, 87L, 87L, 55L, 55L, 55L, 55L, 55L, 
55L), CURRENT_ID = c(3L, 4L, 10L, 11L, 12L, 2L, 3L, 4L, 5L, 5L, 
6L, 9L, 10L, 11L, 12L), C = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
1L, 0L, 0L, 0L, 0L, 1L, 0L)), .Names = c("A", "B", "participant", 
"trial", "CURRENT_ID", "C"), row.names = c(NA, -15L), class = "data.frame") 

# where can the consecutives start? Only look at those with same trial/participant 
idx <- which(diff(dat[,"CURRENT_ID"])==1) 
idx <- Filter(function(i) dat[i,"trial"]==dat[i+1,"trial"], idx) 
idx <- Filter(function(i) dat[i,"participant"]==dat[i+1,"participant"], idx) 

# create the dataframes 
lapply(idx, function(i) dat[c(i,i+1),]) 
Verwandte Themen