我正在尝试将以下列表转换为数据框。
我尝试过 melt/cast、ldply、unlist 等,但似乎无法获得预期的输出。
非常感谢!
df <- list(
name=rep(c(11,12), each=1),
value=rnorm(2),
name=rep(c(13,14), each=1),
value=rnorm(2)
)
df
我想在数据框中输出以下内容:
name value
11 1.187
12 0.691
13 0.452
14 0.898
最佳答案
一个选项是堆叠
成一个两列的data.frame
,然后展开
它回到“宽”格式
library(tidyverse)
enframe(df) %>%
unnest(value) %>%
group_by(name) %>%
mutate(rn = row_number()) %>%
spread(name, value) %>%
select(-rn)
# A tibble: 4 x 2
# name value
# <dbl> <dbl>
#1 11 -0.484
#2 12 -0.110
#3 13 -0.328
#4 14 0.0737
或者另一种选择是使用 tidyr
的开发版本中的 pivot_longer
df %>%
set_names(str_c(names(.), "_", cumsum(names(.) == "name"))) %>%
as_tibble %>%
mutate(rn = row_number()) %>%
pivot_longer(-rn, names_to =c(".value", "group"), names_sep = '_') %>%
select(name, value)
或者使用base R
reshape(transform(stack(df), rn = ave(seq_along(ind), ind,
FUN = seq_along)), idvar = 'rn', direction = 'wide', timevar = 'ind')
关于r - 将列表转换为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57811760/