我有一些大資料框,足以在我的機器上突破 R 的極限;例如,我目前正在處理的是 2 列乘 7000 萬行。內容并不重要,但以防萬一,第 1 列是字串,第 2 列是整數。
我想做的是將該資料幀拆分為 n 個部分(例如,20 個,但最好可以根據具體情況進行更改),以便我可以一次處理每個較小的資料幀. 這意味著(a)結果必須產生命名的東西(例如,“newdf_1”,“newdf_2”,...“newdf_20”或其他東西),并且(b)原始資料框中的每一行都需要是在一個(也是唯一一個)新的“子”資料幀中。順序無關緊要,但按行順序執行對我來說很有意義。
一旦我完成這項作業,我將開始一次重新組合它們(使用rbind())一對。
我看過split(),但據我所知,它旨在處理因素(我沒有)。
有任何想法嗎?
uj5u.com熱心網友回復:
您可以創建一個新列并根據該列拆分資料框。列不需要是因子,但需要是可以被split函式轉換為因子的資料型別。
# Number of groups
N <- 20
dat$group <- 1:nrow(dat) %% N
# Add 1 to group
dat$group <- dat$group 1
# Split the dat by group
dat_list <- split(dat, f = ~group)
# Set the name of the list
names(dat_list) <- paste0("newdf_", 1:N)
資料
set.seed(123)
# Create example data frame
dat <- data.frame(
A = sample(letters, size = 70000000, replace = TRUE),
B = rpois(70000000, lambda = 1)
)
uj5u.com熱心網友回復:
這是一個tidyverse基于的解決方案。嘗試使用read_csv_chunked().
# practice data
tibble(string = sample(letters, 1e6, replace = TRUE),
value = rnorm(1e6) %>%
write_csv("test.csv")
# here's the solution
partial_data <- read_csv_chunked("test.csv",
DataFrameCallback$new(function(x, pos) filter(x, string == "a")),
chunk_size = 1000)
您可以將呼叫包裝read_csv_chunked在一個函式中,在該函式中更改子集所在的字串。
這或多或少是這個問題的重復: 如何僅讀取滿足從 csv 到 R 的條件的行?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412438.html
標籤:
上一篇:在Plotly上繪制df行
下一篇:使用首先處理的年份創建新變數
