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



我想将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.

我个人更喜欢将数据集保存在列表中,例如使用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

由reprex包(v2.0.1)于2018-10-16创建

最新更新