2016-08-23 3 views
1

У меня есть большой фреймворк данных, который я хотел бы разбить на несколько небольших фреймов данных на основе значения в столбце Name.Разделить данные на несколько небольших кадров данных в R

head(DATAFILE) 

# Age Site Name 1 2 3 4 5 

# 10  1  Orange 0 2 1 0 1 
# 10  1  Apple 2 5 4 0 2 
# 10  1  Banana 0 0 0 0 2 
# 20  2  Orange 0 2 1 0 0 
# 20  2  Apple 0 2 0 7 1 
# 20  2  Banana 0 4 1 3 6 

И пример файла желаемого результата;

head(Orange) 

# Age Site Name 1 2 3 4 5 

# 10  1  Orange 0 2 1 0 1 
# 20  2  Orange 0 2 1 0 0 

Я попытался

SPLIT.DATA <- split(DATAFILE, DATAFILE$Name, drop = FALSE) 

Но это возвращает большой список, и я хотел бы отдельные файлы, так что я могу сохранить их в виде CSV-файлов. Поэтому я хотел бы либо лучше делить исходный файл, либо способ дальнейшего разделения файла SPLIT.DATA.

+2

Лучше держать его в 'list' и петли через' SPLIT.DATA' писать CSV сразу вместо нескольких объектов в глобальном envirnoment, а затем сохранить его в индивидуальном порядке. i..e 'lapply (names (SPLIT.DATA), function (nm) write.csv (SPLIT.DATA [[nm]], paste0 (nm," .csv "), row.names = FALSE, quote = FALSE)) ' – akrun

+0

Мы рекомендуем использовать' dput' для обмена данными, подобными этому, в вопросах R (см. Описание тега R), так как он легко воспроизводится людьми, которые хотят вам помочь. –

+0

Я уже обновил комментарий. Пожалуйста, проверь это. – akrun

ответ

1

Лучше всего сохранить наборы данных непосредственно из вывода list, а не создавать отдельные объекты в глобальной среде. Мы зацикливаем на names «SPLIT.DATA» и записываем элементы list в отдельные файлы csv с тем же именем, что и имена элементов list, на номера paste, введя имена .csv в вызове write.csv.

lapply(names(SPLIT.DATA), function(nm) 
    write.csv(SPLIT.DATA[[nm]], paste0(nm, ".csv"), row.names = FALSE, quote = FALSE)) 
+0

Для того, чтобы отдельные data.frames могли «загрязнять» глобальные env. 'list2env' очень полезен. – hvollmeier

+0

@hvollmeier Да, вы можете использовать 'list2env', но не рекомендуется, так как большая часть операций может быть выполнена в' lsit' – akrun

+0

@akrun Привет, akrun, может дать мне представление о том, когда использовать 'lapply' или в котором случаев. Я имею в виду, что мы используем почти во многих случаях, но просто чтобы понять, когда идти на это, независимо от того, какую функцию мы используем внутри него. –