我正在尝试使用for循环按年份过滤大型数据集。然后,我想在全局环境中创建新的数据集,以用于进一步的计算。
system("pause")
years <- c("2006", "2007", "2008", "2009", "2010", "2011", "2012")
我可以使它起作用,但是它并不能创建每年的数据集。它只会创建去年的数据集。
答案 0 :(得分:2)
正如@akrun所说,将对象拆分成很多对象不是一个好主意,因此请将它们放在列表中。 data.table具有执行此功能的功能。
首先,我加载库,设置随机数生成器种子,并创建一些虚拟数据。
# 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))
为您提供了已过滤数据帧的列表。