我有一个1000行的数据帧,我想对它一次执行100行操作。 因此,我试图找出如何使用行数的计数器增量,并选择100行,如1到100,然后101到200 ... uptil 1000,并使用每个子集执行操作for循环。任何人都可以请建议如何做到这一点,因为我找不到一个好方法。从R数据帧中选择一个范围的行
3
A
回答
0
答案从@mrdwab是伟大的,说明了如何避免for循环。但如果你真的必须使用一个for循环(在biglm包就是一个例子,你可能想),那么这里是一个办法:
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], ])
}
7
一个简单的方法是创建一个分组变量,然后使用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
。
使用您的一个data.frame
与1000行的例子,你rep()
的说法应该是这样的:
rep(1:10, each=100)
相关问题
- 1. 从一个范围中选择数字
- 2. 如何从R中的数据帧中选择12行数据
- 3. 使用一个数据帧对R中另一个数据帧的数据范围求和
- 4. 选择范围内的数据库行
- 5. R - 根据另一个数据帧中的列从数据帧中删除行
- 6. 数据表按行范围选择c#
- 7. 选择数据范围
- 8. 从移动范围数据中的R
- 9. 一个R函数范围和并行
- 10. 选择从范围
- 11. 在R中的数据帧列表中限制值的范围
- 12. 如何从多行中选择范围
- 13. R:从数据表中范围
- 14. hist2d子范围选择R中
- 15. R按日期范围对数据帧进行子集
- 16. 数据的选择范围,从第一个到最后一个appeareance
- 17. 选择行中的数据帧中RGTK2
- 18. 从数据帧Pandas-选择行
- 19. 如何从范围中选择一个随机数?
- 20. 在mysql中选择一个值范围
- 21. 在Excel中选择一个范围vbscript
- 22. 从数据帧中选择“中间”行,总行数为偶数
- 23. 在另一个数据帧中定义唯一值范围的一个数据帧中计算唯一值
- 24. r选择已从数据帧单数据点
- 25. MySQL选择数据之间的范围
- 26. 选择日期范围内的数据
- 27. 选择某些行中的数据帧
- 28. MySQL - 如何按日期范围选择一个月的数据?
- 29. 从数据帧的单个列中选择唯一值
- 30. 转换一个数据帧为数值数据帧中的R