我有一个包含多个数据帧的列表列表。我想转置数据框,并按原样保留列表的结构。
以这种格式设置数据(来自: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)
})
关于如何修改的任何想法?
答案 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))))