R 传递列表对象的名称以列出对象本身

R Passing Name of List Objects to List Objects Themselves

我使用 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)

我的目标是将其变成如下所示的平面数据框,以便我可以将其导出到 SQL 数据库中。

car_type   speed     wt     price
--------   ------    ----   -----
car        100       5      10        
exotic     1000      1      100 
truck      1         50     5

我的问题是 "car_type" 的标识符存储为列表中数据框的名称,我不知道如何将它传递给重复函数来填充 table.

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

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

然后我使用以下代码在基础 table 中重复 a car_type(由 "X" 代替)然后追加。

category <- lapply(mylist, function(y) rep("X" ,dim(y)[1]))
mylist <- lapply(seq_along(mylist), function(x) 

但是,我似乎无法设法将在 car_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' 的 names 创建 'car_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)