Как изменить структуру данных и транспонировать повторяющиеся столбцы в строки данных? - PullRequest
1 голос
/ 19 апреля 2019

У меня есть кадр данных с повторяющимися столбцами (интервал 5).

мой фрейм данных на данный момент

Так вот как это выглядит: у меня есть 5 типов столбцов, и они повторяются со временем. Повторяющиеся столбцы имеют суффикс в имени, его также можно удалить / переименовать, чтобы все они соответствовали.

То, что я хотел бы сделать, это переставить эти повторяющиеся столбцы в строки, чтобы у меня в конце было всего 5 столбцов (Dates, PX_LAST, PX_HIGH, PX_VOLUME, Name). Тогда я смогу сгруппировать фрейм данных по датам, имени и т. Д. И делать много других вещей.

Я попробовал некоторые манипуляции с оператором канала%>%, но на данный момент это не сработало. Поскольку у меня не осталось идей, я подумал, что, может быть, вы мне поможете.

Заранее спасибо!

1 Ответ

0 голосов
/ 19 апреля 2019

Один из вариантов будет split данных в list data.frame на основе имен столбцов, а затем rbind их вместе

nm1 <-  sub("\\.\\d+", "", names(dft))
i1 <- ave(seq_along(dft), nm1, FUN = seq_along)
out <- do.call(rbind, lapply(split.default(dft, i1), 
      function(x) setNames(x, sub("\\.\\d+", "", names(x)))))
row.names(out) <- NULL
out
#  Date Age
#1    1  21
#2    2  15
#3    1  32
#4    2  12

Или другой вариантцикл по unique именам, подмножеству данных unlist и преобразованию в data.frame

un1 <- unique(nm1)
setNames(data.frame(lapply(un1, 
       function(x) unlist(dft[grep(x, names(dft))]))), un1)

data

dft <- data.frame("Date" = 1:2, "Age" = c(21,15), "Date" = 1:2, "Age" = c(32,12))
...