我有一个名为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
答案 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
}
更一般地说,假设a
和b
表示要以编程方式写出的环境中较大对象或任何对象集合的拆分:
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。