Как я могу записать несколько файлов с разными именами файлов в R - PullRequest
1 голос
/ 16 апреля 2011

У меня есть один БОЛЬШОЙ файл (> 10000 строк данных), и я хочу записать отдельный файл по идентификатору. У меня есть 50 уникальных имен 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) 
}

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Для фрейма данных с именем mtcars, разделенного mtcars$cyl:

lapply(split(mtcars, mtcars$cyl), 
   function(x)write.table(x, file = paste(x$cyl[1], ".txt", sep = "")))

Создает "4.txt", "6.txt", "8.txt" с соответствующими данными. Это должно быть быстрее, чем зацикливание / подмножество, так как подмножество (разбиение) векторизовано.

2 голосов
/ 16 апреля 2011

Один из подходов заключается в использовании пакета plyr и функции d_ply(). d_ply() ожидает data.frame в качестве ввода. Вы также предоставляете столбец (столбцы), который хотите нарезать и нарезать кубиком на data.frame независимо друг от друга. В этом случае у вас есть идентификатор столбца. Эта конкретная функция не возвращает объект, и, таким образом, она полезна для построения графика или итеративного создания чартера и т. Д. Вот небольшой рабочий пример:

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).

РЕДАКТИРОВАТЬ - для ответа на следующий вопрос

Вы всегда можете выбрать нужные столбцы, прежде чем передать их в d_ply(). Кроме того, вы можете использовать / злоупотреблять оператором [ и выбирать нужные столбцы в самом вызове:

dat <- data.frame(ID = rep(letters[1:3],2) , x = rnorm(6), y = rnorm(6)
  , foo = rnorm(6))

d_ply(dat, "ID", function(x)
     write.table(x[, c("x", "foo")], file = paste(x$ID[1], "txt", sep = ".")
     , sep = "\t", row.names = FALSE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...