[英]Randomly sleeting rows based on all groups in two columns
我有一個大約有 167k 行的大型數據集。 我想抽取 2000 行的樣本,同時確保我從數據中的兩列(id & quality)
中的所有組中抽取行。 這是數據的快照
df <- data.frame(id=c(1,2,3,4,5,1,2),
quality=c("a","b","c","d","z","g","t"))
df %>% glimpse()
Rows: 7
Columns: 2
$ id <dbl> 1, 2, 3, 4, 5, 1, 2
$ quality <chr> "a", "b", "c", "d", "z", "g", "t"
因此,我需要確保采樣數據具有來自這兩個組列的所有組合的行。 我希望有人能幫忙。
謝謝!
我想這就是你要找的。
my_df <- data.frame(id = c(1, 2, 3, 4, 5, 1, 2, 2, 2),
quality = c("a", "b", "c", "d", "z", "g", "t", "t", "t"))
my_df <- my_df %>% group_by(id, quality) %>% mutate(Unique = cur_group_id())
my_df$Test <- seq.int(from = 1, to = nrow(my_df), by = 1)
my_a <- my_df %>% group_by(Unique) %>% sample_n(., 1)
my_b <- my_df %>% group_by(Unique) %>% sample_n(., 1)
my_c <- my_df %>% group_by(Unique) %>% sample_n(., 1)
my_d <- my_df %>% group_by(Unique) %>% sample_n(., 1)
my_e <- my_df %>% group_by(Unique) %>% sample_n(., 1)
您不需要那么多數據框,這些只是示例,表明對於每個唯一的組,將隨機提取 1 行。 根據數據樣本,在名為“Test”的列中可以看到差異,特別是對於 id = 2 和 quality = t。
如果要確保每個id
和quality
都在新樣本中表示,則需要按這些變量對數據進行group
。
您正在尋找的是以下內容,
df %>%
group_by(id,quality) %>%
sample_n(1, replace = TRUE)
您可以更改樣本大小 pr group
和id
,並根據需要設置replacement
。
它給出了以下輸出,
# Groups: id, quality [7]
id quality
<dbl> <chr>
1 1 a
2 1 g
3 2 b
4 2 t
5 3 c
6 4 d
7 5 z
您提供的數據具有唯一的組,因此按照您希望的方式進行采樣,提供的行數與您的數據相同。
編輯: sample_n
被 slice_sample slice_sample
,我不知道這一點。 但是您可以通過以下方式輕松更改script
,
df %>%
group_by(id,quality) %>%
slice_sample(
n = 1
)
您還可以通過設置prop
而不是n
來對data.frame
的proportion
進行采樣,
df %>%
group_by(id,quality) %>%
slice_sample(
prop = 0.25
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.