r - 根据前一行值(在同一列中)选择特定行

标签 r loops dataframe row

我一直在尝试想出一种通过 R 编写脚本的方法,但就是做不到。我有一个这样的数据集:

Trial  Type Correct Latency     
1       55  0       0
3       30  1       766
4       10  1       344
6       40  1       716
7       10  1       326
9       30  1       550
10      10  1       350
11      64  0       0
13      30  1       683
14      10  1       270
16      30  1       666
17      10  1       297
19      40  1       616
20      10  1       315
21      64  0       0
23      40  1       850
24      10  1       322
26      30  1       566
27      20  0       766
28      40  1       500
29      20  1       230

持续时间更长(大约 1000 行)。

从这个数据集中,我想创建 4 个单独的 data.frames/tables 我可以导出表格以及进行我自己的计算

我想要一个 data.frame(总共 4 个),每个要点对应一个:

  • 键入 10 行,前面键入 30 行
  • 输入 10 行,前面输入 40 行
  • 键入 20 行,前面键入 30 行
  • 输入 20 行,前面输入 40 行

我希望将相关行中的所有列都放入这些新表中,但只包括行类型 10 或 20 的列信息。

例如,第一个表(类型 10 前面有类型 30)根据样本数据会这样:

Trial  Type Correct Latency     
  4       10     1       344
  10      10     1       350
  14      10     1       270
  17      10     1       297

第二个表(在类型 40 之前输入 10):

Trial    Type  Correct  Latency     
  7       10     1       326
  20      10     1       315
  24      10     1       322

第三个表(在类型 30 之前输入 20):

Trial    Type  Correct  Latency     
  27      20     0       766

第四张表(表 20 前面有类型 40):

Trial    Type  Correct   Latency        
 29      20      1        230

我可以很好地进行子集化以获得一个只有 10 行类型的表,另一个为 20 行类型的表,但我无法弄清楚如何根据先前的类型值为 10 行和 20 行创建不同的表。此外,一个问题是“试验”顺序不对(跳过数字)。

如有任何帮助,我们将不胜感激。谢谢你。

另外,有没有办法也包括前一行,所以第四个表的输出看起来像这样:

第四张表(表 20 前面有类型 40):

Trial    Type  Correct   Latency        
 28      40      1        500
 29      20      1        230

最佳答案

对于第四个示例,您可以将 which()dplyr 中的 lag() 结合使用,以获得满足的索引你的标准。然后,您可以使用它们对 data.frame 进行子集化。

# Get indices of rows that meet condition
ind2 <- which(df$Type==20 & dplyr::lag(df$Type)==40)
# Get indices of rows before the ones that meet condition
ind1 <- which(df$Type==20 & dplyr::lag(df$Type)==40)-1

# Subset data
> df[c(ind1,ind2)]
   Trial Type Correct Latency
1:    28   40       1     500
2:    29   20       1     230

关于r - 根据前一行值(在同一列中)选择特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36843826/

相关文章:

java - 如何在Java中循环使用多线程

javascript迭代对象 - 第一个元素未定义

r - R 中同名行中的值求和

dataframe - Julia DataFrame 中的 Quartils 计算

R data.table 按两列分组和迭代

r - 在 R 中使用线性插值添加缺失的 xts/zoo 数据

R 函数检查另一个函数中的参数数量?

r - 高于给定阈值的向量值的快速求和

python - 如何通过复制上一行来动态创建新行

r - 模拟滚动两个骰子