Как разделить уже разделенное datafame и сохранить в нескольких папках в R - PullRequest
1 голос
/ 22 октября 2019

Я разделил свой фрейм данных на 100 столбцов, как показано ниже. В каждом столбце 10 переменных, включая имя_класса. Каков оптимальный способ создания папки с именем каждого элемента, повторного разбиения каждого элемента на имена классов и сохранения в виде отдельного CSV.

Я пробовал несколько комбинаций из lapply (finction (x), paste0 ()), но не смог.

Итак, предполагая, что разделенный фрейм данных будет таким:

MyDF                          Variables
1_A →   tibble with 10 rows class_name  Green, purple, 
        …
2_B …                          type     
3_C                             ..  
..                              .   
100_XX                              .

Таким образом, ожидаемый результат:

/1_A/   →   1_A.Green.csv
                1_A.purple.csv
                1_A. ….

/2_B/   …       2_B.yellow.csv  
                 …

..      
100_XX

1 Ответ

0 голосов
/ 22 октября 2019

Поскольку вы не предоставляете пример данных, я буду использовать набор данных datasets::mtcars. Вам нужно будет адаптировать решение под ваши данные.

Исходя из вашего комментария, я предполагаю, что вы уже разбили свои данные, используя что-то вроде следующего, которое возвращает список:

dfs <- split(mtcars, mtcars$vs)

Следующий шаг - перебрать этот список, используя имена элементов списка. Создайте каталог для каждого имени элемента списка, затем разбейте каждый фрейм данных и выполните итерацию по результирующему подсписку, используя имена элементов подсписка, записывая каждый фрейм данных в соответствующий каталог с помощью file.path(dn, paste0(fn, ".csv")):

for (dn in names(dfs)){
    dir.create(dn)
    sub_dfs <- split(dfs[[dn]], dfs[[dn]]$gear)
    for (fn in names(sub_dfs)){
        write.csv(sub_dfs[[fn]], file.path(dn, paste0(fn, ".csv")))
    }
}

. Вышеследует создать две директории "0" и "1", каждая из которых содержит несколько CSV.

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