我使用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”的标识符存储为列表中数据框的名称,我不知道如何将其传递给重复函数来填充表格。
例如,我使用以下内容从列表中项目的名称中获取car_type
car_type <- sapply(seq_along(mylist), function(x) names(mylist)[x])
然后我使用以下内容在基础表中重复car_type(由“X”替换),然后追加。
category <- lapply(mylist, function(y) rep("X" ,dim(y)[1]))
mylist <- lapply(seq_along(mylist), function(x)
但是,我似乎无法将car_type中找到的名称传递回我的数据集中创建一个新的类别列,该列会在展平时保持不变。
答案 0 :(得分:2)
你可以使用这两种中的任何一种:
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
答案 1 :(得分:0)
或base R
选项与Map
一起使用'{1}}的'mylist'创建'car_type',然后names
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
答案 2 :(得分:0)
也许更具可读性:
library(magrittr)
mylist %>% do.call(rbind,.) %>% transform(car_type = rownames(.)) %>% set_rownames(NULL)