【问题标题】:How to group by consecutive rows in R如何按R中的连续行分组
【发布时间】:2017-06-16 13:17:36
【问题描述】:

以下是我拥有的一些数据的示例行:

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 的连续行需要被参与者和试验考虑,并且可能需要考虑两次。这是我需要如何考虑连续行的示例。如您所见,有些行需要考虑两次(例如,参与者 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

如何在library(dplyr)group_by(participant,trial)中包含CURRENT_ID的连续行?

【问题讨论】:

  • 你想如何重新组织数据?
  • Wjy 是 A、B、C 和 # cmets 吗?为什么具体是 11 翻倍?
  • 我想对数据进行分组,因为我需要根据参与者、试验和 CURRENT_ID 的连续行对 A、B 和 C 列进行一些计算。

标签: r dplyr row grouping


【解决方案1】:

不知道如何使用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),])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2020-09-15
    • 2021-12-09
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多