【问题标题】:rbind a list and recover names [duplicate]rbind 列表并恢复名称
【发布时间】:2019-08-15 05:40:21
【问题描述】:

我正在互联网上搜索一种从列表创建数据框但将列表元素的名称作为一列单独保留的方法。我在 2014 年看到了 this,但很多功能已被弃用和/或它们都没有做我想做的事情。

这是我到目前为止所做的,但这是一种很老套的方法。

RNGkind("Mersenne-Twister")
set.seed(42)

my_list <- list(a = rnorm(22, 4, 1),
                b = sample(1:1000, 10, replace = T),
                c = rep(1334, 5))

my_df <- data.frame(names = rep(names(my_list), do.call(c, lapply(my_list, length))),
      values = do.call(c, my_list))

有没有更优雅的方式来实现这一点?我不是tidyversetidyr,但如果它比这更精简,我愿意做任何事情。

【问题讨论】:

  • 你能把my_list$c弄小一点吗? 5个案例就足够证明了。

标签: r list dataframe


【解决方案1】:

我们可以从base R使用stack

my_df2 <- stack(my_list)[2:1]
all.equal(my_df, my_df2, check.attributes = FALSE)
#[1] TRUE

tidyverse

library(tibble)
library(tidyr)
enframe(my_list) %>%
   unnest(value)

【讨论】:

    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2011-11-13
    相关资源
    最近更新 更多