R-有效计算每组二进制变量中的开关数
为了提供一些上下文,我有一个心理学实验的眼动数据框架,我想计算每个参与者在两个感兴趣区域(AOI)之间的切换 这里是问题的简化数据帧(我们假设R-有效计算每组二进制变量中的开关数,r,R,为了提供一些上下文,我有一个心理学实验的眼动数据框架,我想计算每个参与者在两个感兴趣区域(AOI)之间的切换 这里是问题的简化数据帧(我们假设AOI2==!AOI1所以我们不需要它): 一个选项是使用dplyr::lag将该值与当前行进行比较,以便计算每个参与者的开关数 library(tidyverse) df %>% group_by(Participant) %>% summarise(count = sum(AOI1 != lag(AOI1, default = -In
AOI2==!AOI1
所以我们不需要它):
一个选项是使用
dplyr::lag
将该值与当前行进行比较,以便计算每个参与者的开关数
library(tidyverse)
df %>% group_by(Participant) %>%
summarise(count = sum(AOI1 != lag(AOI1, default = -Inf)))
# # A tibble: 7 x 2
# Participant count
# <int> <int>
# 1 1 5
# 2 2 4
# 3 3 5
# 4 4 4
# 5 5 6
# 6 6 6
# 7 7 4
库(tidyverse)
df%>%分组依据(参与者)%>%
总结(count=sum(AOI1!=lag(AOI1,默认值=-Inf)))
##A tibble:7 x 2
#参与者人数
#
# 1 1 5
# 2 2 4
# 3 3 5
# 4 4 4
# 5 5 6
# 6 6 6
# 7 7 4
由于您已经在使用tidyverse
,因此可以使用lag
作为dplyr
的一部分提供。这将检查AOI1的值是否与前一个值相同,如果不相同,则将标志设置为1。对于每个参与者的第一条记录,该值自动设置为NA
。请注意,group_by
是必需的,否则每次遇到新参与者时,该标志不会被“重置”。还假设数据按参与者和时间排序;如果没有,管道在分组人之前安排(参与者,时间)
df <- tibble(Participant = rep(1:7, times = 1, each = 10),
Time = rep(1:10, 7),
AOI1 = rbinom(70, 1, .5))
df2 <- df %>%
group_by(Participant) %>%
mutate(switch = ifelse(AOI1 != lag(AOI1), 1, 0)) %>%
summarise(num_switches = sum(switch, na.rm = TRUE))
df%
突变(开关=ifelse(AOI1!=lag(AOI1),1,0))%>%
总结(num_switches=sum(switch,na.rm=TRUE))
太好了,滞后
正是我需要的!很高兴了解arrange
,现在不需要它,但它肯定会在某个时候派上用场。
library(tidyverse)
df %>% group_by(Participant) %>%
summarise(count = sum(AOI1 != lag(AOI1, default = -Inf)))
# # A tibble: 7 x 2
# Participant count
# <int> <int>
# 1 1 5
# 2 2 4
# 3 3 5
# 4 4 4
# 5 5 6
# 6 6 6
# 7 7 4
df <- tibble(Participant = rep(1:7, times = 1, each = 10),
Time = rep(1:10, 7),
AOI1 = rbinom(70, 1, .5))
df2 <- df %>%
group_by(Participant) %>%
mutate(switch = ifelse(AOI1 != lag(AOI1), 1, 0)) %>%
summarise(num_switches = sum(switch, na.rm = TRUE))