我一直在尝试想出一种通过 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/