【发布时间】:2021-04-08 11:46:58
【问题描述】:
我有 50 位完成任务的参与者的数据。每个人完成了 450 次试验,这些试验分为 3 个区块(每个区块 150 次试验;这些是实验条件)。条件是“快乐”、“悲伤”和“中性”,并以随机顺序呈现给参与者。每个参与者数据当前都合并到一个整体数据框中,如下所示:
| participant | condition |
|---|---|
| 1 | neutral |
| 1 | neutral |
| 1 | neutral |
| (...) | neutral |
| 2 | happy |
| 2 | happy |
| 2 | happy |
| (...) | happy |
我想创建一个名为 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,并且只会使用第一个元素。谁能发现我哪里出错了?
【问题讨论】:
-
match(condition, c("neutral","happy","sad"))(在 mutate 内)将为您提供所需的整数,比case_when或几乎任何其他方法快得多(~30 倍)。 -
每个参与者的输出应该有多少行,1、150、其他?