Условная случайная выборка - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно было бы сделать условную случайную выборку, но я не уверен, как этого добиться ... поэтому любая помощь будет НАМНОГО оценена :) Давайте предположим, что мой фрейм данных следующий:

df <- data.frame(newspaper = sample(c("Newspaper 1", "Newspaper 2", "Newspaper 3", "Newspaper 4"), 90, replace = TRUE), event = sample(c("Event 1", "Event 2", "Event 3", "Event 4", "Event 5"), 90, replace = TRUE), article = sample(c(0:1), 90, replace = TRUE))
df <- subset(df, article >0)

[article = 1 означает, что есть статья.Было бы названием фактической статьи в реальном наборе данных]

Мне нужно было бы выбрать две случайные статьи, когда их больше двух для каждой комбинации newspaper + event, и сохранить все статьииначе.Я совершенно не уверен, как построить цикл, чтобы получить это ... есть идеи?Спасибо!Фред

1 Ответ

1 голос
/ 11 марта 2019

Мы можем group_by newspaper и event и if, если в группе более 2 строк, затем выбрать случайные 2 строки или else выбрать все строки.

library(dplyr)

df %>%
  group_by(newspaper, event) %>%
  slice(if(n() > 2) sample(1:n(), 2) else 1:n())

# newspaper   event   article
#   <fct>       <fct>     <int>
# 1 Newspaper 1 Event 1       1
# 2 Newspaper 1 Event 1       1
# 3 Newspaper 1 Event 2       1
# 4 Newspaper 1 Event 2       1
# 5 Newspaper 1 Event 3       1
# 6 Newspaper 1 Event 3       1
# 7 Newspaper 1 Event 4       1
# 8 Newspaper 1 Event 4       1
# 9 Newspaper 2 Event 1       1
#10 Newspaper 2 Event 2       1
# … with 24 more rows

Или мы можем избежать условия if, используя pmin, где выбирается минимальное значение для выборки между 2 или числом строк в группе.

df %>%
  group_by(newspaper, event) %>%
  slice(sample(1:n(), pmin(2, n())))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...