首页 > 解决方案 > name the list after looping in R

问题描述

the for loop below create a different dataset, using for loop. I would like to change the name of [[i]] to its vector value which is the name of the i th country. Many thanks in advance.

 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

Expected Answer

   [[5]] -> I would like to see here Oceania
# A tibble: 24 x 6
   Oceania   ``         ``    ``       ``     ``
   <fct>     <fct>   <int> <dbl>    <int>  <dbl>
 1 Australia Oceania  1952  69.1  8691212 10040.
 2 Australia Oceania  1957  70.3  9712569 10950.
 3 Australia Oceania  1962  70.9 10794968 12217.
 4 Australia Oceania  1967  71.1 11872264 14526.
 5 Australia Oceania  1972  71.9 13177000 16789.
 6 Australia Oceania  1977  73.5 14074100 18334.
 7 Australia Oceania  1982  74.7 15184200 19477.
 8 Australia Oceania  1987  76.3 16257249 21889.
 9 Australia Oceania  1992  77.6 17481977 23425.
10 Australia Oceania  1997  78.8 18565243 26998.
# ... with 14 more rows

标签: rdata-manipulation

解决方案


而是使用split.

res <- split(gapminder, gapminder$continent)

names(res)
# [1] "Africa"   "Americas" "Asia"     "Europe"   "Oceania" 

res$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

推荐阅读