作者haitairoutzu (海苔肉粽)
看板R_Language
标题Re: [问题] CSV资料切割
时间Thu Feb 23 10:24:14 2023
※ 引述《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
![](https://cache.ptt.cc/c/https/i.imgur.com/5b2pzEil.jpg?e=1719813555&s=_ryUpGcMIRHU-cJDnN1sDQ)
-------------------------------------------------------------------
谢谢各位的解答,我收益良多
如今我有一个衍伸的问题
如果我要将这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://webptt.com/cn.aspx?n=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
1F:→ lycantrope: 如果分析都套用一样的func,分组後用groupby处理 02/23 11:02
2F:→ locka: 设一个存放结果的dataframe,在callback function里面把算 02/23 14:03
3F:→ locka: 出来的结果加到那个dataframe就好啦~ 02/23 14:03
4F:→ locka: callback function就是设定每个读取的chunk做同样的运算, 02/23 14:03
5F:→ locka: 不用再特别groupby 02/23 14:03