我一直试图想办法通过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或20的列信息。
例如,第一个表(类型10前面的类型30 )会根据示例数据这样做:
Trial Type Correct Latency
4 10 1 344
10 10 1 350
14 10 1 270
17 10 1 297
第二个表格(类型10,前面是类型40 ):
Trial Type Correct Latency
7 10 1 326
20 10 1 315
24 10 1 322
第三个表格(类型20,前面是类型30 ):
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
答案 0 :(得分:0)
对于第四个示例,您可以将which()
与lag()
中的dplyr
结合使用,以获得符合条件的索引。然后,您可以使用这些来对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
答案 1 :(得分:0)
如果您始终要删除数据的首次试用,请参阅以下示例代码。
var1 <- c(1,2,1,2,1,2,1,2,1,2)
var2 <- c(1,1,1,2,2,2,2,3,3,3)
dat <- data.frame(var1, var2)
var1 var2
1 1 1
2 2 1
3 1 1
4 2 2
5 1 2
6 2 2
7 1 2
8 2 3
9 1 3
10 2 3
#delete only this line directly
filter(dat,lag(var2)==var2)
var1 var2
1 1 1
2 2 1
3 1 1
6 2 2
7 1 2
10 2 3
#delete the first 2 trials
#make a list of all rows where var2[n-1]!=var2[n] --> using lag from dplyr
drops <- c(1,2,which(lag(dat$var2)!=dat$var2), which(lag(dat$var2)!=dat$var2)+1)
if (!identical(drops,numeric(0))) { dat <- dat[-drops,] }
var1 var2
3 1 1
6 2 2
7 1 2
10 2 3