Случайно разбить таблицу данных и сделать выходные файлы в R - PullRequest
3 голосов
/ 31 января 2020

Я хочу случайным образом разбить таблицу данных на n выходов; тогда я хочу записать эти таблицы для каждого списка. Итак, в тесте я хочу написать файл для каждого списка в тесте.

library(data.table)

set.seed(100)

dt <- data.table(x=rnorm(1000))

n <- 10 # number of data sets

# randomly splits dt into n number of outputs
test <- split(dt, sample(1:n, nrow(dt), replace=T))

# writing tables for each sublist within test
# write.table(test)
# names <- paste0("output", n, ".txt", sep="")

Ответы [ 2 ]

2 голосов
/ 31 января 2020

Мы можем использовать fwrite как data.table и намного быстрее

library(data.table)
lapply(names(test), function(nm) fwrite(test[[nm]], paste0("output", nm, ".txt")))

header 'x' - это имя столбца, и если нам нужно некоторое пользовательское форматирование, оно может быть сделано с cat

lapply(names(test), function(nm) 
      cat(test[[nm]][[1]], file = paste0("output", nm, ".txt"), sep = "\n"))

Или как @ chinsoon12, упомянутый в комментариях, указать col.names = FALSE (по умолчанию это TRUE в fwrite)

lapply(names(test), function(nm) fwrite(test[[nm]],
          paste0("output", nm, ".txt"), col.names = FALSE))
2 голосов
/ 31 января 2020

Вы можете сделать:

lapply(seq_along(test), function(x) 
       write.table(test[[x]], file = paste0('output', x, '.txt')))
...