Транспонировать фреймы данных в списке списков - PullRequest
0 голосов
/ 02 декабря 2018

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

Данные настроены в этом формате (от: John McDonnell):

parent <- list(
  a = list(
    foo = data.frame(first = c(1, 2, 3), second = c(4, 5, 6)),
    bar = data.frame(first = c(1, 2, 3), second = c(4, 5, 6)),
    puppy = data.frame(first = c(1, 2, 3), second = c(4, 5, 6))
  ),
  b = list(
    foo = data.frame(first = c(1, 2, 3), second = c(4, 5, 6)),
    bar = data.frame(first = c(1, 2, 3), second = c(4, 5, 6)),
    puppy = data.frame(first = c(1, 2, 3), second = c(4, 5, 6))
  )
)

Это работает, когда одинсписок фреймов данных используется, но не для списка списков:

a_tran <- lapply(a, function(x) {
  t(x)
})

Есть мысли о том, как изменить?

1 Ответ

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

Вы можете использовать modify_depth из purrr

library(purrr)
modify_depth(.x = parent, .depth = 2, .f = ~ as.data.frame(t(.)))
#$a
#$a$foo
#       V1 V2 V3
#first   1  2  3
#second  4  5  6

#$a$bar
#       V1 V2 V3
#first   1  2  3
#second  4  5  6

#$a$puppy
#       V1 V2 V3
#first   1  2  3
#second  4  5  6


#$b
# ...

A base R, которую @hrbrmstr, первоначально размещенный в комментарии, будет

lapply(parent, function(x) lapply(x, function(y) as.data.frame(t(y))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...