以 100 行为一组的子集数据框

Subset data frame in batches of 100 rows

我想按 100 行为一组对大型数据框进行子集化,以提供给函数。

一个简化的示例:这是我的 "large" 1000 行数据框。

df<-data.frame(c(sample(2:100,1000,replace=TRUE)),c(sample(2:100,1000,replace=TRUE)))

我需要将 df[1] 中的每组 100 行输入到这个虚拟函数中:

dummy<-function(x){
return(c("There are ",x," dummies in this room"))
}

我需要以 100 个为一组执行此操作,因为虚拟函数一次只能处理 100 个值。

这会将整个 df[1] 提供给函数:

lapply(df[,1],dummy)

但是,我需要这样的东西:

lapply(df[1:100,1],dummy)
lapply(df[101:200,1]dummy)
. . . etc

如何以简洁的方式执行此操作,最好使用 base r?

如果您的数据集中没有因子变量,请使用 split on 或者您不想使用 cut 的向量路径,像这样的短程序可能就足够了:

df<-data.frame(c(sample(2:100,1000,replace=TRUE)),c(sample(2:100,1000,replace=TRUE)))
sample<-list()
div<-seq(100,nrow(df),100)
for(i in 1:length(div))
{
    sample[[i]]<-df[(100*(i-1)):div[i],]
}

正如@A Webb 所建议的那样,使用 split 应该会有所帮助。

df<-data.frame(c(sample(2:100,1000,replace=TRUE)),
               c(sample(2:100,1000,replace=TRUE)))

# For sequential grouping
groups<-10 
split(df, factor(sort(rank(row.names(df))%%groups)))

# For Random sampling of 100
split(df, sample(1:groups, nrow(df), replace=T))

sapply(groups_split, yourfunc)

可能存在更有效的方法,希望看到新的答案。