【问题标题】:Create a list of datafames using for loop使用 for 循环创建数据框列表
【发布时间】:2021-08-15 13:59:14
【问题描述】:

我有大约 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 个),其中包含数据帧的字符名称,而不是数据帧。

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

【问题讨论】:

    标签: r list dataframe for-loop


    【解决方案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 日创建

    【讨论】:

    • 完美运行!!!感谢您非常快速的回答,以及向我介绍“foreach”包!!!
    【解决方案2】:

    我有点想知道使用 for 循环的动机,为什么不一起 listing 这个呢?

    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)
    

    【讨论】:

    • 因为我在消息中提到了大约 200 个不同名称的数据框。
    • 但是创建字符向量而不是列表参数有什么区别?好的,你可以从文件中读取这个吗?然后查看我的编辑。
    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多