【问题标题】:R: Easiest way to generate dataframe out of list of records [duplicate]R:从记录列表中生成数据框的最简单方法[重复]
【发布时间】:2021-03-21 03:38:54
【问题描述】:

我有一个这样的列表:

l1 <- list(c("1", "A"), c("2", "B"), c("3", "C"))

我想从中创建一个数据框,其中各个列表的第一个值是第一列的值,第二个是第二列的值,所以我想要的输出是:

col1 col2
-----------
 1    A
 2    B
 3    C

但是,当我这样做时

data.frame(l1),我将行作为列:

col1 col2 col3
---------------
 1    2    3
 A    B    C

data.frame 函数的文档中,我找不到相应的参数。如何获得所需格式的数据框?

【问题讨论】:

  • library(data.table); setDT(transpose(l1))[].
  • 这能回答你的问题吗?它说 tidyverse,但也显示了其他解决方案。 Tidyverse approach to binding unnamed list of unnamed vectors by row - do.call(rbind,x) equivalent
  • 我可能也可以使用那里描述的方法,尽管我更喜欢@DaveArmstrongs 解决方案,因为它为我相当简单的问题提供了一种解决方案,而且我没有明确要求采用 tidyverse 方法.因此,我不认为我的问题是完全重复的。

标签: r list dataframe


【解决方案1】:

应该这样做:

library(magrittr)
do.call(rbind, l1) %>% as.data.frame() %>% setNames(c("col1", "col2")) 
#   col1 col2
# 1    1    A
# 2    2    B
# 3    3    C


【讨论】:

  • 这需要附上tidyverse吗?
  • 仅用于管道,其他函数为基本 R 函数。它与 Duck 的解决方案基本相同,但使用管道而不是单个内联函数。因此,您可以根据需要加载 magrittrdplyr
  • 嗯,我忽略了这一点。我建议只编辑使用magrittr。仅为管道加载整个 tidyverse 有点多。
【解决方案2】:

试试这个:

#Code
res <- setNames(do.call(rbind,lapply(l1, function(x) as.data.frame(t(x)))),c('col1','col2'))

输出:

  col1 col2
1    1    A
2    2    B
3    3    C

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多