1

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
Seyma Kalay
  • 2,037
  • 10
  • 22

2 Answers2

3

Rather use 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
jay.sf
  • 60,139
  • 8
  • 53
  • 110
1

R is a vectorised language; you can accomplish the same thing you are trying to accomplish as follows:

# Allocate some memory for the list: gpm_list => empty list
gpm_list <- vector("list", length(unique(gapminder$continent)))

# Split the data.frame into a list of data.frames: 
# gpm_list => list of data.frames
gpm_list <- with(
  gapminder,
  split(
    gapminder,
    continent
  )
)
hello_friend
  • 5,682
  • 1
  • 11
  • 15