我是一名研究助理,收集了眼动数据,现在我试图使用R来分析这些数据。
从我使用的眼球跟踪器来看,每个样本都被标记为是否属于眼跳(这意味着眼睛在运动)和是否属于眨眼。当有人开始眨眼时,眼球跟踪器首先识别眼跳,然后识别眨眼。为了能够替换属于眨眼的所有眼动样本(数据文件中的行),我需要创建一个变量来标记所有包含眨眼的眼球。下面是一个简单的示例:
我有数据:
Data <- data.frame(Blink=c(0,0,0,1,1,0,0,0,1,1,0,0,0,0,0), Saccade=c(0,1,1,1,1,1,0,1,1,1,1,0,1,1,0))因此我想要一个像这样的变量:
Data$Saccade_containing_blink <- c(0,1,1,1,1,1,0,1,1,1,1,0,0,0,0)使用R时,哪个函数会给出这个结果?
发布于 2018-08-07 18:13:26
# example data
Data <- data.frame(Blink=c(0,0,0,1,1,0,0,0,1,1,0,0,0,0,0),
Saccade=c(0,1,1,1,1,1,0,1,1,1,1,0,1,1,0))
library(dplyr)
Data %>%
group_by(group = cumsum(Saccade==0)) %>% # group your Saccades
mutate(Saccade_containing_blink = max(Blink), # if there's a Blink update all rows within that Saccade
Saccade_containing_blink = ifelse(Saccade == 0, 0, Saccade_containing_blink)) %>% # update Saccade to exclude the 0s (0s separate Saccades)
ungroup() %>% # ungroup data
select(-group) # remove grouping column
# # A tibble: 15 x 3
# Blink Saccade Saccade_containing_blink
# <dbl> <dbl> <dbl>
# 1 0 0 0
# 2 0 1 1
# 3 0 1 1
# 4 1 1 1
# 5 1 1 1
# 6 0 1 1
# 7 0 0 0
# 8 0 1 1
# 9 1 1 1
# 10 1 1 1
# 11 0 1 1
# 12 0 0 0
# 13 0 1 0
# 14 0 1 0
# 15 0 0 0这种方法的原理是能够对Saccade列进行分组,并检查每个Blink中至少有一行中是否有Saccade。我假设在Saccade列中,扫视由一个0分隔。
https://stackoverflow.com/questions/51723692
复制相似问题