首页 > 解决方案 > 在R中将数据框拆分为一定数量的组

问题描述

我有一个包含 285000 条记录的数据框,我想将其拆分为 10 个数据框,以便我可以轻松保存和访问。我正在尝试像这样拆分它,但我不确定如何分别保存所有数据帧:

groups <- c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10")
X <- split(data5, f = groups)

像这样我只收到一个子集数据帧。

标签: rdataframesplit

解决方案


split如果您想data单独保存它,我建议您使用以下方法tidyverse

拆分数据

# libraries;
library(tidyverse)
library(data.table)

# split data according to some
# variable and store

data_list <- mtcars %>% split(
        f = .$cyl
) %>% set_names(
        nm = paste("cylinder", names(.), sep = "")
)

在这里,f = .$cyl指的是您感兴趣的数据集中的分组变量。cyl在此示例中,我根据in拆分数据mtcars

该函数根据data. 在这种情况下,有 4、6 和 8 个气缸。

我继续set_namesfrompurrr以相应地命名列表中的每个元素。

保存数据

# store and save locally
# by using map

map(
        .x = 1:length(data_list),
        .f = function(i) {
                
                # set name of data to save locally
                path <- paste(names(data_list[i]), ".csv", sep = "")
                
                # save with fwrite
                fwrite(
                        data_list[[i]],
                        file = path,
                        sep  = ";"
                )
                
                
        }
)

我使用map遍历split创建的列表的整个长度,并根据我们上面设置的名称将它们保存在本地,以fwrite获得data.table更好的性能。

请注意,在脚本中,每个数据都保存为,paste(names(data_list[i]), ".csv", sep = "")计算结果为cylinder4.csv和。cylinder6.csvcylinder8.csv

对您的数据使用相同的方法,只需对脚本进行细微更改即可。

最好的


推荐阅读