【问题标题】:name the list after looping in R [duplicate]在R中循环后命名列表[重复]
【发布时间】:2021-12-03 14:32:06
【问题描述】:

下面的 for 循环使用 for 循环创建不同的数据集。我想将[[i]] 的名称更改为其向量值,即i th 国家/地区的名称。非常感谢。

 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

预期的答案

   [[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

【问题讨论】:

  • 在末尾添加names(df) &lt;- cont 就可以了,不过最好使用split
  • name

标签: r data-manipulation


【解决方案1】:

宁可使用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

【讨论】:

    【解决方案2】:

    R 是矢量化语言;您可以按照以下方式完成您尝试完成的相同事情:

    # 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
      )
    )
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2014-08-30
      • 2014-06-17
      • 1970-01-01
      • 2016-11-13
      相关资源
      最近更新 更多