Let's say I have a data.frame like:
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))
And I want to be able to write a csv file for each value of x. Is it possible to do this with ddply?
I can already do this with a for loop in a few lines... but I'm curious if it's possible to do it with 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)
}
Continuing from Joshua's answer, the plyr
function to use is d_ply
which does not expect to return anything. You can do something like this:
d_ply(df, .(a),
function(sdf) write.csv(sdf,
file=paste(sdf$a[[1]],".csv",sep="")))
The file
argument to write.csv
is constructed such that each subset gets a different filename.
It's possible to do it with ddply
, but that is not what the function was designed for. From the plyr
documentation:
All plyr functions use the same split-apply-combine strategy...
You want to split the data.frame and apply a function but you don't want to return anything, so ddply
will throw an error if you don't return something that can be combined into a data.frame.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.