首先,这是一些玩具数据:
df <- data.frame(
"stim" = c("face", "object", "pareidolia", "face", "face", "object", "pareidolia", "object"),
"RT" = c(23, 24, 25, 26, 27, 22, 25, 23),
"Opac" = c(70, 60, 80, 65, 60, 61, 59, 70)
)
我想确保数据集中每个刺激变量的数量相等。我正在使用以下代码来尝试此操作:
library(dplyr)
newdf <- df %>%
mutate(mn = min(table(stim))) %>%
group_by(stim) %>%
sample_n(mn[1]) %>%
ungroup()
除了对数据进行重新排序之外,这几乎可以完美工作。我想要的输出如下所示:
stim RT Opac
face 23 70
object 24 60
pareidolia 25 80
face 26 65
object 22 61
pareidolia 25 59
但是这段代码输出这个:
stim RT Opac
face 23 70
face 26 65
object 24 60
object 22 61
pareidolia 25 80
pareidolia 25 59
我意识到这可能会发生,因为我正在使用 table(),但我不知道还能如何解决这个问题。任何建议将不胜感激。
另外,还有一个额外的问题:有没有办法确定(函数、代码片段等)在此过程中从中删除数据的行号?
您可以使用过滤策略而不是
slice_n
df %>%
mutate(mn = min(table(stim))) %>%
filter(sample(seq_along(stim)) <= mn, .by=stim)