首页 > 解决方案 > R:仅基于前 150 行和每个参与者的现有条件创建一个新列?

问题描述

我有完成任务的 50 名参与者的数据。每个人完成 450 次试验,这些试验分为 3 个区块(每个区块 150 次试验;这些是实验条件)。条件是“快乐”、“悲伤”和“中性”,并以随机顺序呈现给参与者。每个参与者数据当前都合并到一个整体数据框中,如下所示:

参与者 (健康)状况
1 中性的
1 中性的
1 中性的
(...) 中性的
2 快乐的
2 快乐的
2 快乐的
(...) 快乐的

我想创建一个名为 order 的新列,用于存储参与者完成的第一个条件块。因此,如果他们先完成中性块,则将其编码为 1,如果是快乐块,则将其编码为 2,如果是悲伤块,则将其编码为 3。

由于总共有 450 次试验,而且我只对前 150 次(第一个条件块)感兴趣,所以我尝试了以下代码:

dat %>% 
  group_by(participant) %>%
  slice(1:150) %>% 
  if(condition == "neutral"){
    dat$order <- 1
  } else if(condition == "happy"){
    dat$order <- 2
  } else if(condition == "sad"){
    dat$order <- 3
  }

但是,这会返回以下错误:条件的长度 > 1,并且只会使用第一个元素。谁能发现我哪里出错了?

标签: rdplyr

解决方案


如果条件的所有 150 个值同时出现,您可以只检查first每个参与者的值而不是 150。

library(dplyr)

dat %>% 
  group_by(participant) %>%
  mutate(order = case_when(first(condition) == "neutral" ~ 1, 
                           first(condition) == "happy" ~ 2, 
                           first(condition) == "sad" ~ 3)) %>%
  ungroup

推荐阅读