如何解决如何在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 \”。这应该比循环/子集更快,因为子集(分割)是矢量化的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。