R将列表对象的名称传递给列表对象本身
我使用R API向数据供应商收到一个命名的数据帧列表。下面是我将如何构造一个类似的结构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 =
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)