使用行拆分R中的数据帧并在划分后创建新的数据帧

时间:2017-11-04 23:56:10

标签: r for-loop dataframe split

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

dfList <- split(df, df$grp)