【问题标题】:Convert list of unequal sizes to data frame in R [duplicate]将不相等大小的列表转换为R中的数据框[重复]
【发布时间】:2021-10-05 12:44:25
【问题描述】:

给定一个具有不同长度的n个元素的列表,如下所示:

library(tidyverse)
l <- list(
  "a" = c(1,2),
  "b" = c(3),
  "c" = c(4,5,6)
)

我想将此列表转换为以下数据框:

out <- data.frame(
  foo = c("a", "a", "b","c","c","c"),
  bar = c(1:6)
)

print(out)
#>   foo bar
#> 1   a   1
#> 2   a   2
#> 3   b   3
#> 4   c   4
#> 5   c   5
#> 6   c   6

在 R 中实现这一目标的最佳和最简单的方法是什么?我设法得到了想要的输出,但是代码看起来很繁琐,太复杂了:

df <- data.frame()

for (i in 1:length(l)){
  d <- data.frame(
    names(l[i]) <-  l[i]
  )
  d <- d %>% pivot_longer(1,names_to = "foo", values_to = "bar")
  df <- bind_rows(df,d)
}

print(df)
#>   foo bar
#> 1   a   1
#> 2   a   2
#> 3   b   3
#> 4   c   4
#> 5   c   5
#> 6   c   6

reprex package (v2.0.0) 于 2021-10-05 创建

【问题讨论】:

  • stack(l) ....

标签: r


【解决方案1】:
library(tidyverse)

l <- list(
  "a" = c(1,2),
  "b" = c(3),
  "c" = c(4,5,6)
)
l
#> $a
#> [1] 1 2
#> 
#> $b
#> [1] 3
#> 
#> $c
#> [1] 4 5 6

l %>% enframe() %>% unnest(value)
#> # A tibble: 6 x 2
#>   name  value
#>   <chr> <dbl>
#> 1 a         1
#> 2 a         2
#> 3 b         3
#> 4 c         4
#> 5 c         5
#> 6 c         6

reprex package (v2.0.1) 于 2021-10-05 创建

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 2022-06-27
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多