在列表列表内转置数据帧

时间:2018-12-01 22:13:51

标签: r list dataframe

我有一个包含多个数据帧的列表列表。我想转置数据框,并按原样保留列表的结构。

以这种格式设置数据(来自: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 :(得分:3)

您可以使用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
# ...

@hrbrmstr最初在评论中发布的一个base R选项是

lapply(parent, function(x) lapply(x, function(y) as.data.frame(t(y))))