使用for循环在环境中创建新的数据集

时间:2019-11-30 18:01:08

标签: r loops

我正在尝试使用for循环按年份过滤大型数据集。然后,我想在全局环境中创建新的数据集,以用于进一步的计算。

创建年份列表

system("pause")

for循环

years <- c("2006", "2007", "2008", "2009", "2010", "2011", "2012")

我可以使它起作用,但是它并不能创建每年的数据集。它只会创建去年的数据集。

2 个答案:

答案 0 :(得分:2)

正如@akrun所说,将对象拆分成很多对象不是一个好主意,因此请将它们放在列表中。 具有执行此功能的功能。

首先,我加载库,设置随机数生成器种子,并创建一些虚拟数据。

# Load library
library(data.table)

# Set RNG seed
set.seed(-1)

# Create dummy data
dt <- data.table(year = sample(2010:2019, 20, replace = TRUE),
                 values = runif(20))

数据如下:

# Peak at data
dt
#>     year     values
#>  1: 2014 0.39776012
#>  2: 2011 0.96993492
#>  3: 2019 0.38070385
#>  4: 2011 0.61255114
#>  5: 2012 0.24757823
#>  6: 2015 0.27762129
#>  7: 2013 0.34467428
#>  8: 2018 0.41104418
#>  9: 2013 0.57036917
#> 10: 2012 0.01701321
#> 11: 2017 0.08455335
#> 12: 2012 0.70820147
#> 13: 2012 0.17986181
#> 14: 2015 0.13952228
#> 15: 2012 0.72047842
#> 16: 2019 0.76211781
#> 17: 2010 0.37023226
#> 18: 2010 0.39598003
#> 19: 2013 0.31291316
#> 20: 2017 0.43134829

接下来,我split year

# Split into a list
split(dt, by = "year")
#> $`2014`
#>    year    values
#> 1: 2014 0.3977601
#> 
#> $`2011`
#>    year    values
#> 1: 2011 0.9699349
#> 2: 2011 0.6125511
#> 
#> $`2019`
#>    year    values
#> 1: 2019 0.3807038
#> 2: 2019 0.7621178
#> 
#> $`2012`
#>    year     values
#> 1: 2012 0.24757823
#> 2: 2012 0.01701321
#> 3: 2012 0.70820147
#> 4: 2012 0.17986181
#> 5: 2012 0.72047842
#> 
#> $`2015`
#>    year    values
#> 1: 2015 0.2776213
#> 2: 2015 0.1395223
#> 
#> $`2013`
#>    year    values
#> 1: 2013 0.3446743
#> 2: 2013 0.5703692
#> 3: 2013 0.3129132
#> 
#> $`2018`
#>    year    values
#> 1: 2018 0.4110442
#> 
#> $`2017`
#>    year     values
#> 1: 2017 0.08455335
#> 2: 2017 0.43134829
#> 
#> $`2010`
#>    year    values
#> 1: 2010 0.3702323
#> 2: 2010 0.3959800

reprex package(v0.2.1.9000)于2019-11-30创建

答案 1 :(得分:0)

您可以对mtcars使用lapply,例如:

cyls <- c(4, 6, 8)
df_list <- lapply(cyls, function(x) filter(mtcars, cyl==x))

为您提供了已过滤数据帧的列表。