这是一个示例,我们生成一个包含 100 万行的数据框,将其分成 20 组,在结果列表中命名数据框,然后在列表中的第一个数据框上运行 summary(),方法是使用$ 运算符的名称。
set.seed(90125)
df <- as.data.frame(matrix(rnorm(40000000,mean = 25,sd=5),ncol=40))
# make group number start with 1, as remainders
# vary from 0 - 19
df$group <- 1:1000000 %% 20 + 1
dfList <- split(df,df$group)
此时内存中有两个数据副本:原始数据帧df,第二个副本在dfList列表中被分成20个不同的数据帧。
我们可以用length() 函数来证明这一点:
> length(dfList)
[1] 20
每个数据框有 50,000 个观察值,我们可以使用 nrow() 函数来演示:
> nrow(dfList[[1]])
[1] 50000
我们可以使用names() 和paste0() 的组合为数据框指定名称。
# add names to the list and print the names
names(dfList) <- paste0("data",1:20)
names(dfList)
> names(dfList)
[1] "data1" "data2" "data3" "data4" "data5" "data6" "data7" "data8"
[9] "data9" "data10" "data11" "data12" "data13" "data14" "data15" "data16"
[17] "data17" "data18" "data19" "data20"
一旦数据帧被命名,就可以通过提取运算符的$ 形式从列表中访问它们。我们将生成第一个数据框的摘要,并按名称访问它。
summary(dfList$data1[1:5])
...和输出:
> summary(dfList$data1[1:5])
V1 V2 V3 V4
Min. :-0.7251 Min. : 2.481 Min. : 3.02 Min. : 3.173
1st Qu.:21.5919 1st Qu.:21.603 1st Qu.:21.57 1st Qu.:21.526
Median :24.9990 Median :24.982 Median :24.97 Median :24.914
Mean :24.9968 Mean :24.978 Mean :24.97 Mean :24.931
3rd Qu.:28.3971 3rd Qu.:28.330 3rd Qu.:28.32 3rd Qu.:28.357
Max. :45.7101 Max. :44.730 Max. :48.03 Max. :45.506
V5
Min. : 2.427
1st Qu.:21.595
Median :25.010
Mean :24.997
3rd Qu.:28.406
Max. :44.199
>
注意:原始数据帧大约消耗312.8Mb,所以在执行split()函数后,两份数据将消耗大约625.6Mb的RAM。如有必要,可以使用rm() 函数从 RAM 中删除原始数据帧。