随机抽样数据框中的一定百分比的行

ATM*_*hew 16 row r subset random-sample

问题相关.

gender <- c("F", "M", "M", "F", "F", "M", "F", "F")
age    <- c(23, 25, 27, 29, 31, 33, 35, 37)
mydf <- data.frame(gender, age) 

mydf[ sample( which(mydf$gender=='F'), 3 ), ]
Run Code Online (Sandbox Code Playgroud)

不是选择多行(上面的情况是3),如何用"F"随机选择20%的行?那么在带有"F"的五行中,如何随机抽样20%的这些行.

Ben*_*Ben 14

这个怎么样:

mydf[ sample( which(mydf$gender=='F'), round(0.2*length(which(mydf$gender=='F')))), ]
Run Code Online (Sandbox Code Playgroud)

其中0.2是你的20%,length(which(mydf$gender=='F'))是行的总行数F

  • +1,但请注意,20%可能不是整数,所以需要使用round. (2认同)

小智 14

您可以使用包中的sample_frac()功能dplyr.

例如,如果您想在每组中抽样20%:

mydf %>% sample_frac(.2)
Run Code Online (Sandbox Code Playgroud)

如果您想在每个性别组中抽样20%:

mydf %>% group_by(gender) %>% sample_frac(.2)
Run Code Online (Sandbox Code Playgroud)