Можно ли использовать write.table () и ddply вместе? - PullRequest
4 голосов
/ 05 августа 2010

Допустим, у меня есть 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))

И я хочу иметь возможность записать CSV-файл для каждого значения x.Возможно ли это сделать с помощью 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 ]

4 голосов
/ 05 августа 2010

Продолжая ответ Джошуа, используемую функцию plyr составляет d_ply, которая ничего не ожидает. Вы можете сделать что-то вроде этого:

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

Аргумент file для write.csv построен так, что каждое подмножество получает свое имя файла.

1 голос
/ 05 августа 2010

Это возможно сделать это с ddply, но это не то, для чего была разработана функция.Из документации plyr:

Все функции plyr используют одну и ту же стратегию разделения-объединения-объединения ...

Вы хотите разделить data.frame и применитьфункция, но вы не хотите возвращать что-либо, поэтому ddply выдаст ошибку, если вы не вернете что-то, что может быть объединено в data.frame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...