r - генерировать несколько файлов из рандомизации фрейма данных - PullRequest
0 голосов
/ 01 декабря 2018

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

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

Это то, что у меня есть до сих пор:

# Create example data frame
df <- data.frame(x=c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,8,8))
df$y <- c(4,8,9,1,1,5,8,8,3,2,0,9,4,4,7,3,5,5,2,4,6,6)
df$z <- c("A","A","A","B","B","B","C","C","C","D","D","D","F","F","F","G","G","G","H","H","I","I")

set.seed(30)

# Split data frame based on info in one column (i.e. df$x) and store in a list 
dt_list <- split(df, f = df$x)

# RANDOMIZE data list -- Create a new index and change the order of dt_list
# SAVE the result to "random list" (i.e. 'rd_list')

rd_list <- dt_list[sample(1:length(dt_list), length(dt_list))]

# Put back together data in the order established in 'rd_list' 
rd_data <- do.call(rbind, rd_list)

Рандомизирует фрейм данных так, как мне нужно, но я не знаю, как «сохранить и повторить»поэтому я получаю несколько файлов, скажем, около 20, названных в качестве оригинала и последовательной нумерации (например, df_1, df_2 ...).

Кроме того, будучи случайными выборками, можно получить повторы.Есть ли способ автоматически удалить повторяющиеся файлы?

Спасибо!

1 Ответ

0 голосов
/ 01 декабря 2018

В этом подходе используется цикл while и удобная функция sample_n() из пакета dplyr, которая выбирает указанное количество строк из фрейма данных (с заменой или без нее).

library(dplyr)

# Create the data
weather_data <- data.frame(Weather = c("Sunny", "Cloudy", "Rainy", "Sunny"),
                           Temperature = c(75, 68, 71, 76))

# Twenty times, repeatedly sample rows from the data and write to a csv file
total_files <- 20
df_index <- 1

while (df_index <= total_files) {
  # Get a sample of the data
  sampled_subset <- sample_n(weather_data,
                             size = 10,
                             replace = TRUE)

  # Write the data to a csv file
  filename_to_use <- paste0("Sample_Data", "_", df_index, ".csv")

  write.csv(x = sampled_subset,
            file = filename_to_use, sep = ",")

  df_index <- df_index + 1
}
...