我有一個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