Re: [問題] CSV資料切割

看板R_Language作者 (海苔肉粽)時間1年前 (2023/02/23 10:24), 1年前編輯推噓0(005)
留言5則, 2人參與, 1年前最新討論串3/4 (看更多)
※ 引述《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

02/23 11:02, 1年前 , 1F
如果分析都套用一樣的func,分組後用groupby處理
02/23 11:02, 1F

02/23 14:03, 1年前 , 2F
設一個存放結果的dataframe,在callback function裡面把算
02/23 14:03, 2F

02/23 14:03, 1年前 , 3F
出來的結果加到那個dataframe就好啦~
02/23 14:03, 3F

02/23 14:03, 1年前 , 4F
callback function就是設定每個讀取的chunk做同樣的運算,
02/23 14:03, 4F

02/23 14:03, 1年前 , 5F
不用再特別groupby
02/23 14:03, 5F
文章代碼(AID): #1ZzivGvo (R_Language)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 4 篇):
文章代碼(AID): #1ZzivGvo (R_Language)