每个条目选择20个第一行

use*_*782 2 r data-manipulation

我有一个具有这种结构的大型数据集(数百万条记录):

id | ident1  |  ident2  
1    A000001    B000001 
2    A000001    B000002
................

99   A000001    B000099
.........
337  A000002    B000037
338  A000002    B000043
Run Code Online (Sandbox Code Playgroud)

换句话说,对于每个[ident1],我在[ident2]中有大量条目.我希望能够只选择其中的20个(所有这些条目,如果少于20个).

顺序并不重要:所以如果给定的ident1有100个匹配的[ident2],我想要前20个条目,或20个随机条目,这没关系.

在此先感谢,p.

akr*_*run 6

尝试

library(dplyr)
df %>% 
   group_by(ident1) %>%
   slice(1:20) 
Run Code Online (Sandbox Code Playgroud)

或使用 data.table

library(data.table)
setDT(df)[, head(.SD,20), by=ident1]
Run Code Online (Sandbox Code Playgroud)

如果您需要样品

setDT(df)[df[, .I[sample(.N,20, replace=FALSE)], by=ident1]$V1]
Run Code Online (Sandbox Code Playgroud)

如果某些组的20行数少于行数sample

setDT(df)[,if(.N < 20) .SD else .SD[sample(.N,20, replace=FALSE)], by=group]
Run Code Online (Sandbox Code Playgroud)