![](/img/trans.png)
[英]dplyr mutate in R - adding a new column depending on sequence of another column
[英]R dplyr identifying a condition sequence in one column and mutating another (or so)
我有以下形式的眼動數據:
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"))
因此,變異比較眨眼= dur == 0L就是錯誤的測試,因為沒有整數。
與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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.