我有以下形式的眼动追踪数据:
smp x y time dur
1 1 491 798 62 0
2 2 491 798 62 0
3 3 491 798 62 0
4 4 491 798 62 0
5 5 491 798 62 0
6 6 491 798 62 0
7 7 491 798 62 0
8 8 491 798 62 0
9 9 491 798 62 0
10 10 494 798 781 719
11 11 492 794 828 47
12 12 491 787 953 125
13 13 496 625 984 31
14 14 500 535 1046 62
15 15 544 488 1109 63
16 16 567 465 1171 62
17 17 582 453 1234 63
当dur(最后一列)为零时,拍摄对象闭上眼睛但闪烁需要一定的时间才能执行,此外此设备已老化且采样/记录速率不是很精确。
我希望有一个dplyr方法,如果dur中的零是> = 4的0序列,则将闪烁列变为true或false。
预期输出
smp x y time dur blink
1 1 491 798 62 0 TRUE
2 2 491 798 62 0 TRUE
3 3 491 798 62 0 TRUE
4 4 491 798 62 0 TRUE
5 5 491 798 62 0 TRUE
6 6 491 798 62 0 TRUE
7 7 491 798 62 0 TRUE
8 8 491 798 62 0 TRUE
9 9 491 798 62 0 TRUE
10 10 494 798 781 719 FALSE
11 11 492 794 828 47 FALSE
12 12 491 787 953 125 FALSE
13 13 496 625 984 31 FALSE
14 14 500 535 1046 62 FALSE
15 15 544 488 1109 63 FALSE
16 16 567 465 1171 62 FALSE
17 17 582 453 1234 63 FALSE
可重复数据
structure(list(smp = 1:17, x = c(491L, 491L, 491L, 491L, 491L,
491L, 491L, 491L, 491L, 494L, 492L, 491L, 496L, 500L, 544L, 567L,
582L), y = c(798L, 798L, 798L, 798L, 798L, 798L, 798L, 798L,
798L, 798L, 794L, 787L, 625L, 535L, 488L, 465L, 453L), time = c(62L,
62L, 62L, 62L, 62L, 62L, 62L, 62L, 62L, 781L, 828L, 953L, 984L,
1046L, 1109L, 1171L, 1234L), dur = c(0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 719L, 47L, 125L, 31L, 62L, 63L, 62L, 63L)), .Names = c("smp",
"x", "y", "time", "dur"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17"))
注意:一方面我想记录实际的眨眼,另一方面我希望保留仪器在这种情况下所呈现的测量的不确定性。另外,我想要一个long_blinks列来检查设备是否由于视频捕获的低帧速率而未能接收到一次闪烁的结束和另一次的开始。这也可能意味着测试对象仅长时间闭上眼睛,但两种情况都有牵连。我将发布第二个案例的详细信息。
关于第二个案例: 如果碰巧有“整数”数据,那么闪烁会更长,所以解决方案提供了满足 我没有提供可重现的data.frame。
使用数字
重现数据structure(list(smp = 1:17, x = c(491, 491, 491, 491, 491,
491, 491, 491, 491, 494, 492, 491, 496, 500, 544, 567,
582), y = c(798, 798, 798, 798, 798, 798, 798, 798,
798, 798, 794, 787, 625, 535, 488, 465, 453), time = c(62,
62, 62, 62, 62, 62, 62, 62, 62, 781, 828, 953, 984,
1046, 1109, 1171, 1234), dur = c(0, 0, 0, 0, 0, 0,
0, 0, 0, 719, 47, 125, 31, 62, 63, 62, 63)), .Names = c("smp",
"x", "y", "time", "dur"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17"))
所以变异比较blink = dur == 0L只是错误的测试,因为没有整数。
答案 0 :(得分:1)
使用dplyr
df %>% group_by(time) %>% mutate(blink = dur==0L & n() >= 4)
# smp x y time dur blink
# 1 1 491 798 62 0 TRUE
# 2 2 491 798 62 0 TRUE
# 3 3 491 798 62 0 TRUE
# 4 4 491 798 62 0 TRUE
# 5 5 491 798 62 0 TRUE
# 6 6 491 798 62 0 TRUE
# 7 7 491 798 62 0 TRUE
# 8 8 491 798 62 0 TRUE
# 9 9 491 798 62 0 TRUE
# 10 10 494 798 781 719 FALSE
# 11 11 492 794 828 47 FALSE
# 12 12 491 787 953 125 FALSE
# 13 13 496 625 984 31 FALSE
# 14 14 500 535 1046 62 FALSE
# 15 15 544 488 1109 63 FALSE
# 16 16 567 465 1171 62 FALSE
# 17 17 582 453 1234 63 FALSE
<强>日期强>
df <- read.table(text="smp x y time dur
1 1 491 798 62 0
2 2 491 798 62 0
3 3 491 798 62 0
4 4 491 798 62 0
5 5 491 798 62 0
6 6 491 798 62 0
7 7 491 798 62 0
8 8 491 798 62 0
9 9 491 798 62 0
10 10 494 798 781 719
11 11 492 794 828 47
12 12 491 787 953 125
13 13 496 625 984 31
14 14 500 535 1046 62
15 15 544 488 1109 63
16 16 567 465 1171 62
17 17 582 453 1234 63", header=T)