r - R - 有效地计算每组二进制变量中的开关数量
问题描述
为了提供一些背景信息,我有一个来自心理学实验的眼动追踪数据的数据框,我想为每个参与者计算两个感兴趣区域 (AOI) 之间的切换。
这是问题的简化数据框(我们假设AOI2 == !AOI1
我们不需要它):
library(tidyverse)
df <- tibble(Participant = rep(1:7, times = 1, each = 10),
Time = rep(1:10, 7),
AOI1 = rbinom(70, 1, .5))
AOI1
我想要的是计算每个参与者在一段时间内的变化值的多少倍。我可以使用for
像下面这样的循环来做到这一点,但我想知道是否有一种更简单、更 R 的方式来做到这一点?
df.switches <- tibble(Participant = 1:7,
Switches = NA)
for(p in 1:7){
s <- 0
for(i in 2:10){
if(subset(df, Participant == p & Time == i, select = AOI1) !=
subset(df, Participant == p & Time == i-1, select = AOI1)){
s <- s + 1
}
}
df.switches <- df.switches %>%
mutate(Switches = ifelse(Participant == p, s, Switches))
}
解决方案
一种选择是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
推荐阅读
- java - 我如何在 Eclipse IDE 中禁用自动方法选择器
- java - 弹簧转换器优先级
- flutter - 推送通知失败 - Provider Bloc - FormatException
- reactjs - 如何动态映射数组到查询参数
- python - Django Models 根据 Car Make 选择汽车模型
- python - 防止 NaN 值用于隔离林的异常检测
- html - 页脚影响网页且无法正确显示
- angularjs - 具有 AUTOFOCUS 属性的输入字段不起作用
- docker - docker-compose 文件“stderr_lines”中的错误:[“yaml.parser.ParserError:解析块集合时”
- php - 如果数组中存在值,则在 html 选择选项中选择回显