【问题标题】:Splitting data frame in R using rows and creating new data frames after dividing使用行拆分R中的数据框并在划分后创建新的数据框
【发布时间】:2018-04-17 10:18:42
【问题描述】:

我有一个包含 1757808 个观测值和 20 列的数据框,我正在寻找一个可以在每个第 97656 行索引处拆分的函数。因此我应该得到 18 个新的数据帧。列应保持原样。

【问题讨论】:

    标签: r for-loop dataframe split


    【解决方案1】:

    使用cutsplit,您可以获得包含所有拆分数据帧的列表。这是使用mtcars 数据集的示例。

    foo <- mtcars %>% 
      dplyr::mutate(group = row_number(), 
      cut = cut(group, breaks = 18, labels = FALSE))
    
    foo %>% split(foo$cut)
    

    输出:

    $`1`
      mpg cyl disp  hp drat    wt  qsec vs am gear carb group cut
    1  21   6  160 110  3.9 2.620 16.46  0  1    4    4     1   1
    2  21   6  160 110  3.9 2.875 17.02  0  1    4    4     2   1
    
    $`2`
       mpg cyl disp  hp drat    wt  qsec vs am gear carb group cut
    3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1     3   2
    4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1     4   2
    
    $`3`
       mpg cyl disp  hp drat   wt  qsec vs am gear carb group cut
    5 18.7   8  360 175 3.15 3.44 17.02  0  0    3    2     5   3
    6 18.1   6  225 105 2.76 3.46 20.22  1  0    3    1     6   3
    
    $`4`
       mpg cyl disp  hp drat   wt  qsec vs am gear carb group cut
    7 14.3   8  360 245 3.21 3.57 15.84  0  0    3    4     7   4
    
    $`5`
       mpg cyl  disp hp drat   wt qsec vs am gear carb group cut
    8 24.4   4 146.7 62 3.69 3.19 20.0  1  0    4    2     8   5
    9 22.8   4 140.8 95 3.92 3.15 22.9  1  0    4    2     9   5
    
    $`6`
        mpg cyl  disp  hp drat   wt qsec vs am gear carb group cut
    10 19.2   6 167.6 123 3.92 3.44 18.3  1  0    4    4    10   6
    11 17.8   6 167.6 123 3.92 3.44 18.9  1  0    4    4    11   6
    
    $`7`
        mpg cyl  disp  hp drat   wt qsec vs am gear carb group cut
    12 16.4   8 275.8 180 3.07 4.07 17.4  0  0    3    3    12   7
    13 17.3   8 275.8 180 3.07 3.73 17.6  0  0    3    3    13   7
    
    $`8`
        mpg cyl  disp  hp drat   wt qsec vs am gear carb group cut
    14 15.2   8 275.8 180 3.07 3.78   18  0  0    3    3    14   8
    
    $`9`
        mpg cyl disp  hp drat    wt  qsec vs am gear carb group cut
    15 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4    15   9
    16 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4    16   9
    
    $`10`
        mpg cyl  disp  hp drat    wt  qsec vs am gear carb group cut
    17 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4    17  10
    18 32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1    18  10
    
    $`11`
        mpg cyl disp hp drat    wt  qsec vs am gear carb group cut
    19 30.4   4 75.7 52 4.93 1.615 18.52  1  1    4    2    19  11
    
    $`12`
        mpg cyl  disp hp drat    wt  qsec vs am gear carb group cut
    20 33.9   4  71.1 65 4.22 1.835 19.90  1  1    4    1    20  12
    21 21.5   4 120.1 97 3.70 2.465 20.01  1  0    3    1    21  12
    
    $`13`
        mpg cyl disp  hp drat    wt  qsec vs am gear carb group cut
    22 15.5   8  318 150 2.76 3.520 16.87  0  0    3    2    22  13
    23 15.2   8  304 150 3.15 3.435 17.30  0  0    3    2    23  13
    
    $`14`
        mpg cyl disp  hp drat    wt  qsec vs am gear carb group cut
    24 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4    24  14
    25 19.2   8  400 175 3.08 3.845 17.05  0  0    3    2    25  14
    
    $`15`
        mpg cyl disp hp drat    wt qsec vs am gear carb group cut
    26 27.3   4   79 66 4.08 1.935 18.9  1  1    4    1    26  15
    
    $`16`
        mpg cyl  disp  hp drat    wt qsec vs am gear carb group cut
    27 26.0   4 120.3  91 4.43 2.140 16.7  0  1    5    2    27  16
    28 30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2    28  16
    
    $`17`
        mpg cyl disp  hp drat   wt qsec vs am gear carb group cut
    29 15.8   8  351 264 4.22 3.17 14.5  0  1    5    4    29  17
    30 19.7   6  145 175 3.62 2.77 15.5  0  1    5    6    30  17
    
    $`18`
        mpg cyl disp  hp drat   wt qsec vs am gear carb group cut
    31 15.0   8  301 335 3.54 3.57 14.6  0  1    5    8    31  18
    32 21.4   4  121 109 4.11 2.78 18.6  1  1    4    2    32  18
    

    【讨论】:

      【解决方案2】:

      考虑创建一组 97656 的整数倍,然后使用split

      df$grp <- as.integer((seq(1,1757808)-1) / 97656)
      
      dfList <- split(df, df$grp)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-15
        • 2021-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多