以 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)
可能存在更有效的方法,希望看到新的答案。
我想按 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)
可能存在更有效的方法,希望看到新的答案。