【问题标题】:flatten a named list in R - converting the name into first column展平 R 中的命名列表 - 将名称转换为第一列
【发布时间】:2020-12-26 02:11:11
【问题描述】:

说,我有一个命名列表:

library(dplyr)
myData <- mtcars %>%
  group_by(cyl) %>%
  group_map(~ head(.x, 1L))
names(myData) <- c("Mazda", "Honda", "Suzuki")

现在,我想将列表转换为如下所示的表格:

name  mpg disp  hp drat   wt  qsec vs am gear carb
1:  Mazda 22.8  108  93 3.85 2.32 18.61  1  1    4    1
2:  Honda 21.0  160 110 3.90 2.62 16.46  0  1    4    4
3: Suzuki 18.7  360 175 3.15 3.44 17.02  0  0    3    2

我试过了:

data.frame(Reduce(rbind, myData))
do.call(rbind.data.frame, myData)

但两者都会导致 data.table 没有名称。如何将列表转换为带有 names 列的 data.table?

【问题讨论】:

    标签: r list data.table base


    【解决方案1】:
    rbindlist(myData, idcol = "name")
    #      name  mpg disp  hp drat   wt  qsec vs am gear carb
    # 1:  Mazda 22.8  108  93 3.85 2.32 18.61  1  1    4    1
    # 2:  Honda 21.0  160 110 3.90 2.62 16.46  0  1    4    4
    # 3: Suzuki 18.7  360 175 3.15 3.44 17.02  0  0    3    2
    

    或者在基础 R 中:

    data.frame(name = names(myData), do.call(rbind, myData))
    

    【讨论】:

      【解决方案2】:

      tidyverse 的选项是

      library(dplyr)
      bind_rows(myData, .id = 'name')
      

      【讨论】:

        【解决方案3】:

        基本 R 选项

        cbind(
          name = names(myData),
          do.call(rbind, c(myData, use.names = FALSE))
        )
        

        给予

            name  mpg disp  hp drat   wt  qsec vs am gear carb
        1  Mazda 22.8  108  93 3.85 2.32 18.61  1  1    4    1
        2  Honda 21.0  160 110 3.90 2.62 16.46  0  1    4    4
        3 Suzuki 18.7  360 175 3.15 3.44 17.02  0  0    3    2
        

        【讨论】:

          猜你喜欢
          • 2015-07-04
          • 2018-08-21
          • 1970-01-01
          • 2019-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多