Переименование заголовков столбцов после разделения кадров данных с помощью функции разделения

Это очень простой вопрос, но я изо всех сил пытаюсь его решить. У меня есть фрейм основных данных, который я разделил на несколько фреймов данных на основе уникальных значений в определенном столбце. Это было достигнуто путем создания списка фреймов данных, а затем сохранения каждого фрейма данных в виде отдельного файла csv с помощью функции lapply (см. код ниже).

Пример кода:

split_df <- split(df, df$ID) 
u_ID <- unique(df$ID) 
names(split_df) <- paste(u_ID) 
lapply(names(split_df), function(x) write.csv(split_df[x], file= paste0(x, '_ID.csv'))) 

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

Пример данных:

   ID Count Sp
1   A    23  1
2   A    34  2
3   B     4  2
4   A     4  1
5   C    22  1
6   B    67  1
7   B    51  2
8   A    11  1
9   C    38  1
10  B    59  2

вывод:

structure(list(ID = c("A", "A", "B", "A", "C", "B", "B", "A", 
"C", "B"), Count = c(23L, 34L, 4L, 4L, 22L, 67L, 51L, 11L, 38L, 
59L), Sp = c(1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L)), .Names = c("ID", 
"Count", "Sp"), class = "data.frame", row.names = c(NA, -10L))

Пример фреймов выходных данных (CSV-файлы) с использованием приведенного выше кода:

$A
  A.ID A.Count A.Sp
1    A     23  1
2    A     34  2
4    A      4  1
8    A     11  1

$B
   B.ID B.Count B.Sp
3     B      4  2
6     B     67  1
7     B     51  2
10    B     59  2

$C
   C.ID C.Count C.Sp
5     C     22  1
9     C     38  1

Для этого примера я хотел бы получить выходные файлы csv, содержащие идентификатор заголовков столбцов, количество и Sp. Любые решения будут очень признательны!


person Emily    schedule 02.09.2013    source источник
comment
Вам не нужна строка names(split_df) <- paste(u_ID). names(split_df) уже установлен split().   -  person Ferdinand.kraft    schedule 02.09.2013
comment
Побочный вопрос: вам действительно нужны u_ID <- unique(df$ID)и names(split_df) <- paste(u_ID). Из ?split: Компоненты списка названы по уровням f.   -  person Henrik    schedule 02.09.2013
comment
Вы правы, я не знаю. Спасибо!   -  person Emily    schedule 02.09.2013


Ответы (1)


Используйте это просто:

lapply(names(split_df), function(x) write.csv(split_df[[x]], file= paste0(x, '_ID.csv')))

Обратите внимание на двойные квадратные скобки в split_df[[x]].

person Ferdinand.kraft    schedule 02.09.2013
comment
@ Фердинанд Большое спасибо! Я знал, что это должно быть что-то простое. - person Emily; 02.09.2013