看板 R_Language 關於我們 聯絡資訊
※ 引述《locka (locka)》之銘言: : library(tidyverse) : library(readr) : # 產生測試資料 : demo <- tibble(variable=1:16, : id1=rnorm(16), : id2=rnorm(16), : id3=rnorm(16), : id4=rnorm(16)) : write_csv(demo, "demo.csv") : # 使用read_csv_chunked() 每4row切割並輸出成一個新的檔案 : callback_f <- function(x, pos) write_csv(x, paste0("chunk_",pos%/%4,".csv")) : read_csv_chunked("demo.csv", DataFrameCallback$new(callback_f), chunk_size=4 ) : 結果如下: : 原資料 : https://i.imgur.com/y3GmbSh.jpg
: 輸出4個檔案 : https://i.imgur.com/5b2pzEi.jpg
------------------------------------------------------------------- 謝謝各位的解答,我收益良多 如今我有一個衍伸的問題 如果我要將這4個分開的矩陣做同樣的運算並且將最終運算結果整理到同一個檔案中的話 除了一筆一筆運算外,有沒有比較快的方式? 我使用的指令如下 承續locka的指令 library(igraph) #將4個輸出檔案匯入 data1 <- read.csv("chunk_0.csv", header=T, sep=",",row.names = 1) data2 <- read.csv("chunk_1.csv", header=T, sep=",",row.names = 1) data3 <- read.csv("chunk_2.csv", header=T, sep=",",row.names = 1) data4 <- read.csv("chunk_3.csv", header=T, sep=",",row.names = 1) #自定義一個運算函數 test=function(X){ A=graph.adjacency(t(X), mode="directed",weighted =T) result=topov=cbind(result1=graph.strength(A, mode = "in"), result2=graph.strength(A, mode = "out")) return(list(result=result)) } #將4個匯入檔案分別計算 output1 = test(data1) output2 = test(data2) output3 = test(data3) output4 = test(data4) #將4個計算結果合併並輸出 result1_all = as.data.frame(cbind(output1$result[,1],output2$result[,1],output 3$result[,1],output4$result[,1])) result2_all = as.data.frame(cbind(output$result[,2],output2$result[,2],output3 $result[,2],output4$result[,2])) write_csv(result1_all,"result1_all") write_csv(result2_all,"result2_all") -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.44.152 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1677119056.A.E72.html ※ 編輯: haitairoutzu (140.116.44.152 臺灣), 02/23/2023 10:25:19 ※ 編輯: haitairoutzu (140.116.44.152 臺灣), 02/23/2023 10:26:19
lycantrope: 如果分析都套用一樣的func,分組後用groupby處理 02/23 11:02
locka: 設一個存放結果的dataframe,在callback function裡面把算 02/23 14:03
locka: 出來的結果加到那個dataframe就好啦~ 02/23 14:03
locka: callback function就是設定每個讀取的chunk做同樣的運算, 02/23 14:03
locka: 不用再特別groupby 02/23 14:03