是否可以一起使用write.table()和ddply?

时间:2010-08-05 02:53:17

标签: r

假设我有一个data.frame,如:

a <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame(a,rnorm(100))

我希望能够为x的每个值编写一个csv文件。用ddply可以做到这一点吗?

我已经可以通过几行for循环来做到这一点......但我很好奇是否可以用ddply来完成它。

for (x in 1:nrow(unique(df["a"]))) {
tmp <- unique(df["a"])
tmp2 <- paste(tmp[x,],".csv", sep="")
write.table(subset(df, a == tmp[a,], drop=T),file=tmp2, sep=",", row.names=F)
}  

2 个答案:

答案 0 :(得分:4)

继续Joshua的回答,要使用的plyr函数是d_ply,它不会返回任何内容。你可以这样做:

d_ply(df, .(a),
      function(sdf) write.csv(sdf,
                              file=paste(sdf$a[[1]],".csv",sep="")))

构造file的{​​{1}}参数,使每个子集获得不同的文件名。

答案 1 :(得分:1)

使用ddply进行可能,但这不是该功能的设计目的。来自plyr文档:

  

所有plyr函数都使用相同的函数   split-apply-combine策略......

你想拆分data.frame并应用一个函数,但是你不想返回任何东西,所以ddply如果你没有返回一些东西就会抛出错误可以组合成一个data.frame。