r中一列函数的随机子集

r中一列函数的随机子集,r,R,我想以一列为函数从数据帧中随机提取n行。 在这个例子中: # Reproducible example df <- as.data.frame(matrix(0,2e+6,2)) df$V1 <- runif(nrow(df),0,1) df$V2 <- sample(c(1:10),nrow(df), replace=TRUE) df$V3 <- sample(c("A","B","C"),nrow(df), replace=TRUE) 我不想对循环执行任何,所以我用

我想以一列为函数从数据帧中随机提取
n
行。 在这个例子中:

# Reproducible example
df <- as.data.frame(matrix(0,2e+6,2))
df$V1 <- runif(nrow(df),0,1)
df$V2 <- sample(c(1:10),nrow(df), replace=TRUE)
df$V3 <- sample(c("A","B","C"),nrow(df), replace=TRUE)
我不想对循环执行任何
,所以我用
tapply
尝试了这一行:

df_objective <- tapply(df$V1, df$V2, function(x) df[sample(1:nrow(df),10),"V2"])

df_objective听起来你只是在寻找类似“dplyr”中的
sample_n

或者,还有我的“splitstackshape”包中的
分层


您希望从行中采样,因此这应该是
tapply
的第一个参数,而不是
V1

myrows <- unlist(tapply(1:nrow(df),df$V2,sample,size=10))
df1[myrows,]
myrows您可以试试

library(data.table)
setDT(df)[, .SD[sample(.N, 10)] , V2]
或者@Frank建议的更快的选择

setDT(df)[df[,sample(.I,10),V2]$V1]

这很简洁,虽然当我看到“分层”这个词时,抽样并不是第一件想到的事情,弗兰克,它和“分层抽样”一样。当你看到“分层”时,你会怎么想?不知道,几乎从未见过。我猜“层次模型”好吧,它工作得很好。谢谢你的回答。强制性选择:
setDT(df);df[df[,sample(.I,10),V2]$V1]
好的,谢谢,第二行可以,但是V2似乎是随机排序的。@user3443183如果您编写
keyby=V2
来代替
V2
,应该排序。它们现在是按第一次出现的顺序出现的。好的,现在是按顺序出现的。
library(splitstackshape)
stratified(df, "V2", 10)
myrows <- unlist(tapply(1:nrow(df),df$V2,sample,size=10))
df1[myrows,]
library(data.table)
setDT(df)[, .SD[sample(.N, 10)] , V2]
setDT(df)[df[,sample(.I,10),V2]$V1]