R将列表对象的名称传递给列表对象本身

R将列表对象的名称传递给列表对象本身,r,list,lapply,names,R,List,Lapply,Names,我使用R API向数据供应商收到一个命名的数据帧列表。下面是我将如何构造一个类似的结构 spec1 <- data.frame(speed = 100, wt = 5, price = 10) spec2 <- data.frame(speed = 1000, wt = 1, price = 100) spec3 <- data.frame(speed = 1, wt = 50, price = 5) mylist <- list(car = spec1,exotic =

我使用R API向数据供应商收到一个命名的数据帧列表。下面是我将如何构造一个类似的结构

spec1 <- data.frame(speed = 100, wt = 5, price = 10)
spec2 <- data.frame(speed = 1000, wt = 1, price = 100)
spec3 <- data.frame(speed = 1, wt = 50, price = 5)
mylist <- list(car = spec1,exotic = spec2, truck = spec3)
我的问题是“car_type”的标识符存储为列表中数据帧的名称,我不知道如何将其传递给repeat函数来填充表

例如,我使用以下命令从列表中的项目名称中获取car_类型

car_type <- sapply(seq_along(mylist), function(x) names(mylist)[x])

car\u type您可以使用以下两种方法之一:

  dplyr::bind_rows(mylist, .id = "car_type")
  data.table::rbindlist(mylist, idcol = "car_type")
两种输出:

      car_type speed wt price
1:      car   100  5    10
2:   exotic  1000  1   100
3:    truck     1 50     5

或者,
base R
选项将与
Map
一起,从“mylist”的
名称创建“car\u type”,然后从
rbind
列表中创建
list
元素

do.call(rbind, unname(Map(cbind, car_type = names(mylist), mylist)))
#   car_type speed wt price
#1      car   100  5    10
#2   exotic  1000  1   100
#3    truck     1 50     5
也许更容易阅读:

library(magrittr)
mylist %>% do.call(rbind,.) %>% transform(car_type = rownames(.)) %>% set_rownames(NULL)

哈哈,太棒了,太容易了。花了这么多时间想弄明白。非常感谢@friep
do.call(rbind, unname(Map(cbind, car_type = names(mylist), mylist)))
#   car_type speed wt price
#1      car   100  5    10
#2   exotic  1000  1   100
#3    truck     1 50     5
library(magrittr)
mylist %>% do.call(rbind,.) %>% transform(car_type = rownames(.)) %>% set_rownames(NULL)