Я хотел бы получить два идентификатора, случайно выбранных из предварительно определенного набора идентификаторов.Однако использование sample
с dplyr::filter
на сгруппированном фрейме данных возвращает неожиданные результаты «другого размера выборки», например, если я делаю sample(x,2)
, иногда я получаю 2, иногда я получаю число, не равное 2.
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 4L,
5L, 5L, 6L, 6L), Sub = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L,
4L, 4L, 4L, 5L, 5L, 6L, 6L), .Label = c("a", "b", "c", "d", "f",
"g"), class = "factor")), class = "data.frame", row.names = c(NA,
-14L))
samp.vec <- c(1,2,3,4,5)
library(dplyr)
set.seed(123)
#Return Different sample size, Not working
df %>% group_by(ID)%>%filter(ID %in% sample(samp.vec,2)) %>% count(ID)
df %>% group_by(ID)%>%filter(ID %in% sample(samp.vec,2)) %>% count(ID)
set.seed(123)
#Return one sample size, Working
df %>% group_by(ID)%>% ungroup() %>% filter(ID %in% sample(samp.vec,2)) %>% count(ID)
df %>% group_by(ID)%>% ungroup() %>% filter(ID %in% sample(samp.vec,2)) %>% count(ID)
Одним из решений является использование ungroup()
перед filter
.Кто-нибудь знает, почему это происходит?