我有一个包含1000行的数据框,我想每次对其中100行进行操作。因此,我正在尝试找出如何在行数上使用计数器递增,并选择100行作为一组,例如1到100,101到200...直到1000,然后使用for循环对每个子集执行操作。请问有什么好方法可以实现这个目标吗?
我有一个包含1000行的数据框,我想每次对其中100行进行操作。因此,我正在尝试找出如何在行数上使用计数器递增,并选择100行作为一组,例如1到100,101到200...直到1000,然后使用for循环对每个子集执行操作。请问有什么好方法可以实现这个目标吗?
split()
和lapply()
来执行您需要的任何操作。rep()
轻松创建您的分组。set.seed(1)
demo = data.frame(A = sample(300, 50, replace=TRUE),
B = rnorm(50))
demo$groups = rep(1:5, each=10)
demo.split = split(demo, demo$groups)
lapply(demo.split, colMeans)
# $`1`
# A B groups
# 165.9000000 -0.1530186 1.0000000
#
# $`2`
# A B groups
# 168.2000000 0.1141589 2.0000000
#
# $`3`
# A B groups
# 126.0000000 0.1625241 3.0000000
#
# $`4`
# A B groups
# 159.4000000 0.3340555 4.0000000
#
# $`5`
# A B groups
# 181.8000000 0.0363812 5.0000000
如果你不想将组添加到源data.frame
中,你可以通过以下方式实现相同的效果:
groups = rep(1:5, each=10)
lapply(split(demo, groups), colMeans)
当然,您可以用任何函数替换colMeans
。
以您的1000行数据框为例,您的rep()
语句应该是这样的:
rep(1:10, each=100)
for( i in seq(1,1000,by=100) ) {
myfun( df[ i:(i+99), ] )
}
tmp <- seq( 1, nrow(df), by=100 )
tmp2 <- c( tail( tmp, -1)-1, nrow(df) )
n <- length(tmp)
out <- numeric(n)
for( i in seq_along(tmp) ) {
out[i] <- myfun( df[ tmp[i]:tmp2[i], ] )
}