有没有一种方法可以在不重新排序数据帧的情况下平衡 R 中的数据?

问题描述 投票:0回答:1

首先,这是一些玩具数据:

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(),但我不知道还能如何解决这个问题。任何建议将不胜感激。

另外,还有一个额外的问题:有没有办法确定(函数、代码片段等)在此过程中从中删除数据的行号?

r dataframe sample mutate subsampling
1个回答
0
投票

您可以使用过滤策略而不是

slice_n

df %>%
  mutate(mn = min(table(stim))) %>%
  filter(sample(seq_along(stim)) <= mn, .by=stim)
© www.soinside.com 2019 - 2024. All rights reserved.