假设我有一个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)
}
答案 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。