使用 for 循环创建数据名列表

时间:2021-05-27 10:02:41

标签: r list dataframe for-loop

我有大约 200 个不同名称的数据框,我想创建一个包含所有这些数据框作为元素的列表。我已经创建了一个包含所有这些名称的字符向量,并尝试了 for 循环,但没有成功。有什么想法吗?

示例(不起作用):

wr1 <- data.frame(name = c("Maria","Nikos"), age = c("18","25"))
new <- data.frame(name = c("George","Marianna"), age = c("45","34"))
vage <- data.frame(name = c("Argyris","Nikos"), age = c("37", "26"))

the_names <- c("wr1","new", "vage")


new_list <- list()

for(i in length(the_names)){
  something <- the_names[i]
  new_list <- list(new_list,something)
}

列表已创建,但它只有 2 个元素(不是 3 个),其中包含数据框的字符名称,而不是数据框的字符名称。

我知道我做错了什么,但我卡住了!

2 个答案:

答案 0 :(得分:1)

您可以改用 foreach。对于这种情况,我使用 get 从环境中提取变量。由于 foreach 默认会生成一个列表,因此您有一个 data.frame 列表。

wr1 <- data.frame(name = c("Maria","Nikos"), age = c("18","25"))
new <- data.frame(name = c("George","Marianna"), age = c("45","34"))
vage <- data.frame(name = c("Argyris","Nikos"), age = c("37", "26"))

library(foreach)

the_names <- c("wr1", "new", "vage")

list_df <- foreach (name = the_names) %do% {
  get(name)
}

# Assign names of data to the list
names(list_df) <- the_names
list_df
#> $wr1
#>    name age
#> 1 Maria  18
#> 2 Nikos  25
#> 
#> $new
#>       name age
#> 1   George  45
#> 2 Marianna  34
#> 
#> $vage
#>      name age
#> 1 Argyris  37
#> 2   Nikos  26

reprex package (v2.0.0) 于 2021 年 5 月 27 日创建

答案 1 :(得分:1)

我有点想知道使用 for 循环的动机,为什么不list把它放在一起?

wr1 <- data.frame(name = c("Maria","Nikos"), age = c("18","25"))
new <- data.frame(name = c("George","Marianna"), age = c("45","34"))
vage <- data.frame(name = c("Argyris","Nikos"), age = c("37", "26"))

new_list <- list(wr1, new, vage)

编辑:如果真的有必要从字符向量中获取它,以下也应该起作用:

new_list <- lapply(the_names, function(L) eval(parse(text = L)))

或者简单地说:

new_list <- mget(the_names)