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