代码之家  ›  专栏  ›  技术社区  ›  Seyma Kalay

将在forloop中创建的列表对象以不同的名称保存在R中

  •  0
  • Seyma Kalay  · 技术社区  · 4 年前

    例如,我想将for循环创建的所有列表对象保存为环境中的不同数据集,并使用它们的正确名称 gapminder_Asia, gapminder_Europe,..etc. 非常感谢。

    library(gapminder)
    cont <- unique(gapminder$continent)
    df <- NULL
    for(i in 1:(length(cont))) {
      temp <- gapminder[gapminder$continent == cont[i], ]
      colnames(temp) <- paste0(paste(cont[i]))
      df[[i]] <- temp
    }
    
    df
    

    > unique(gapminder$continent)
    [1] Asia     Europe   Africa   Americas Oceania 
    
    head(gapminder_Asia) 
    
     1 Afghanistan Asia   1952  28.8  8425333  779.
     2 Afghanistan Asia   1957  30.3  9240934  821.
     3 Afghanistan Asia   1962  32.0 10267083  853.
     4 Afghanistan Asia   1967  34.0 11537966  836.
     5 Afghanistan Asia   1972  36.1 13079460  740.
     
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   stefan    4 年前

    就我个人而言,我更喜欢使用。 split 但是,如果您想要的结果是拥有不同的命名对象,那么您可以通过 assign

    library(gapminder)
    
    df <- split(gapminder, gapminder$continent)
    for(i in names(df)) {
      assign(paste("gapminder", i, sep = "_"), df[[i]])
    }
    
    gapminder_Africa
    #> # A tibble: 624 × 6
    #>    country continent  year lifeExp      pop gdpPercap
    #>    <fct>   <fct>     <int>   <dbl>    <int>     <dbl>
    #>  1 Algeria Africa     1952    43.1  9279525     2449.
    #>  2 Algeria Africa     1957    45.7 10270856     3014.
    #>  3 Algeria Africa     1962    48.3 11000948     2551.
    #>  4 Algeria Africa     1967    51.4 12760499     3247.
    #>  5 Algeria Africa     1972    54.5 14760787     4183.
    #>  6 Algeria Africa     1977    58.0 17152804     4910.
    #>  7 Algeria Africa     1982    61.4 20033753     5745.
    #>  8 Algeria Africa     1987    65.8 23254956     5681.
    #>  9 Algeria Africa     1992    67.7 26298373     5023.
    #> 10 Algeria Africa     1997    69.2 29072015     4797.
    #> # … with 614 more rows
    

    2016年10月2021日由 reprex package (v2.0.1)