2017-06-16 14 views
0

で連続した行でグループにはいくつかのデータの一例ラインに続き:私が持っているどのように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 

私がグループに参加、試験とCURRENT_IDの連続した行でデータを必要とします。ただし、CURRENT_IDの連続する行は、参加者と試行者が検討する必要があり、2回考慮する必要があります。ここでは、連続する行をどのように考慮する必要があるかの例を示します。あなたが見ることができるように、行の一部は、以前と次の行で、二回検討する(例えば、参加者ppt01、トライアル45、CURRENT_ID 11)を必要とする:

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 

にCURRENT_IDの連続した行を含める方法library(dplyr)group_by(participant,trial)

+1

あなたがデータを再編成したいどうすればよいですか? –

+0

WjyはA、B、C、#コメントありますか?なぜ具体的に11倍になったのですか? – lukeA

+0

私はCURRENT_IDの参加者、トライアル、および連続した行によるグループ分けに基づいて、列A、B、およびCでいくつかの計算を行う必要があるため、データをgroup_byしたいと思います。 – dede

答えて

0

dplyrでそれを行う方法を知ってはいけないが、ここでのアプローチは、ベース・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),]) 
関連する問題