У меня есть такие данные:
student.id <- c("142", "142", "567", "567", "347", "347", "567", "945")
flag.double <- c("1", "1", "1", "1", "1", "1", "0", "0")
data <- data.frame(student.id, flag.double)
Я хочу сгруппировать по student.id, отфильтровать по учащимся, у которых есть flag.double==1
, и случайным образом выбрать одно наблюдение за учеником (из двух доступных случаев). студентов). Затем я хочу объединить это обратно в данные.
Это дает мне случайные наблюдения, которые я хочу:
flag <- data %>%
group_by(student.id) %>%
filter(flag.double==1) %>%
sample_n(flag.double, replace = T)
Но теперь мне нужно объединить это обратно в исходный фрейм данных, чтобы у меня был столбец, отмечающий эти наблюдения, которые быливыбран случайно.
Далее я просто присоединился к этому набору данных.
data <- left_join(data, flag)
Все работает хорошо, но я ненавижу, как неэффективно все это выглядит. Мне также не нравится создавать новый фрейм данных, чтобы просто присоединить его к исходному. Есть ли более элегантный способ сделать это dplyr, tidyr, plyr, pipe?