R代码将大表拆分为较小的.txt文件并保存到计算机?

时间:2016-10-08 18:06:25

标签: r

我有一个名为SDN_1的巨大.txt文件,行数超过100万。我想使用R.

将此文件拆分为更小的.txt文件(每行10,000行)

我使用此代码将文件加载到R:

SDN_1 <- read.csv("C:/Users/JHU/Desktop/rfiles/SDN_1.csv", header=FALSE)

然后我使用此代码拆分表:

chunk <- 10000
n     <- nrow(SDN_1)
r     <- rep(1:ceiling(n/chunk),each=chunk)[1:n]
d     <- split(SDN_1,r)

接下来,我想将split函数的输出保存为单独的文件,如.txt,并编码为UTF8。需要使用以下格式命名文件:test_YYYMMDD_HHMMSS.txt

我是R的新手,我们将不胜感激。

更新: Hack-R建议使用以下代码创建.csv文件。下面的代码工作了一次然后开始给我下面的错误信息:

代码Hack-R建议:

n <- 1
for(i in d){
con <- file(paste0("file",n,"_", gsub("-
","",gsub(":","",gsub("","_",Sys.time()))), "_",".csv"),encoding="UTF-8")
write.csv(tmp, file = con)
n <- n + 1
}

我收到的错误消息:

Error in is.data.frame(x) : object 'tmp' not found 

1 个答案:

答案 0 :(得分:2)

使用您已有的代码:

SDN_1 <- mtcars # this represents your csv, to make it reproducible

chunk <- 10 # scaled it down for the example
n     <- nrow(SDN_1)
r     <- rep(1:ceiling(n/chunk),each=chunk)[1:n]
d     <- split(SDN_1,r)

n <- 1 # this part is optional
for(i in d){
  con <- file(paste0("file",n,"_", gsub("-","",gsub(":","",gsub(" ","_",Sys.time()))), "_",".csv"),encoding="UTF-8")
  write.csv(tmp, file = con)  
  n <- n + 1
}

更一般地说,假设ab表示要以编程方式写出的环境中较大对象或任何对象集合的拆分:

a <- "a"
b <- "b"

您可以获取包含其名称的矢量:

files <- ls() 

然后循环并以编程方式将它们写入UTF-8编码的csv文件,如下所示:以您请求的格式附加日期和时间:

for(i in files){
  tmp <- get(i)
  con <- file(paste0(tmp,"_", gsub("-","",gsub(":","",gsub(" ","_",Sys.time()))), "_",".csv"),encoding="UTF-8")
  write.csv(tmp, file = con)  
}

我使用Sys.time()作为嵌套gsub() s的时间戳来格式化您想要的方式。我按照this post中的说明将文件编码为UTF-8。