如何在R中写出文件名不同的多个文件

问题描述

|| 我有一个BIG文件(> 10000行数据),我想按ID写入一个单独的文件。我有50个唯一的ID名称,并且每个名称都需要一个单独的文本文件。这是到目前为止我得到的,而且我一直在出错。我的ID实际上是字符串,如果我可以用该字符串命名每个文件,那将是最好的选择。
for (i in 1:car$ID) {
    a <- data.frame(car[,i])
    carib <- car1[,(c(\"x\",\"y\",\"time\",\"sd\"))]
    myfile <- gsub(\"( )\",\"\",paste(\"C:/bridge\",carib,\"_\",i,\".txt\"))
    write.table(a,file=myfile,sep=\"\",row.names=F,col.names=T quote=FALSE,append=FALSE) 
}
    

解决方法

一种方法是使用plyr软件包和
d_ply()
函数。
d_ply()
需要一个data.frame作为输入。您还提供了一列,您希望对该data.frame进行切片和切分以彼此独立地进行操作。在这种情况下,您具有列ID。这个特定的函数不会返回对象,因此对于绘图或迭代制作宪章等很有用。这是一个小工作示例:
library(plyr)

dat <- data.frame(ID = rep(letters[1:3],2),x = rnorm(6),y = rnorm(6))

d_ply(dat,\"ID\",function(x)
     write.table(x,file = paste(x$ID[1],\"txt\",sep = \".\"),sep = \"\\t\",row.names = FALSE))
将使用ID列作为文件名(a.txt,b.txt,c.txt)生成三个制表符分隔的文件。 编辑-解决后续问题 您始终可以将所需的列子集化,然后再将其传递给“ 1”。或者,您可以使用/滥用
[
运算符,并在调用本身中选择所需的列:
dat <- data.frame(ID = rep(letters[1:3],y = rnorm(6),foo = rnorm(6))

d_ply(dat,function(x)
     write.table(x[,c(\"x\",\"foo\")],row.names = FALSE))
    ,对于由
mtcars$cyl
分隔的称为
mtcars
的数据帧:
lapply(split(mtcars,mtcars$cyl),function(x)write.table(x,file = paste(x$cyl[1],\".txt\",sep = \"\")))
这将产生带有相应数据的\“ 4.txt \”,\“ 6.txt \”,\“ 8.txt \”。这应该比循环/子集更快,因为子集(分割)是矢量化的。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...