我可以根据r中一列内的顺序运行对数据进行分组/拆分吗?

时间:2016-10-11 21:06:46

标签: r

我有一个大型数据集,其中一列包含许多不同长度的连续运行(例如1,2,1,2,3,1,2,1,2,3,4,5)。 很多这些运行只有1,2 - 然后再从1开始。

我想以某种方式将我的数据分组/拆分为其中一个运行中包含的所有行。 让我们说为了简单起见,我的数据看起来像这样(我已经更新了列a以包含我实际数据中的前15个值来说明问题):

    df <- data.frame(a = c(1:2, 1:5, 1:2, 1:4, 1:2), b = c(LETTERS[1:15]), c = c(1:15))

 a b  c
1  1 A  1
2  2 B  2
3  1 C  3
4  2 D  4
5  3 E  5
6  4 F  6
7  5 G  7
8  1 H  8
9  2 I  9
10 1 J 10
11 2 K 11
12 3 L 12
13 4 M 13
14 1 N 14
15 2 O 15

我希望获得一个组(或具有条件赋值的新列,我可以用来分组/拆分),其中包含df [,1]中的第一个运行(由行1,2和3组成),一个包含第二次运行(第4,5,6行),依此类推。

我试图在回答这个问题的未经编辑的版本时做出建议         test&lt; - group_by(df,a)%&gt;%mutate(run = seq(length(a)))

但是结果有些乱码,我怀疑这很大程度上是因为很多运行都达到了2。

Source: local data frame [15 x 4]
Groups: a [5]

       a      b     c   run
   <int> <fctr> <int> <int>
1      1      A     1     1
2      2      B     2     1
3      1      C     3     2
4      2      D     4     2
5      3      E     5     1
6      4      F     6     1
7      5      G     7     1
8      1      H     8     3
9      2      I     9     3
10     1      J    10     4
11     2      K    11     4
12     3      L    12     2
13     4      M    13     2
14     1      N    14     5
15     2      O    15     5

编辑:解决方案

    split(df, cumsum(c(TRUE, diff(df$a)!=1)))

效果很好。

1 个答案:

答案 0 :(得分:0)

以下代码按您的意图创建一个运行变量。

df <- data.frame(a = c(1,2,3), b = c(LETTERS[1:9]), c = c(1:9))

library(dplyr)
df <- group_by(df, a) %>% mutate(run = seq(length(a)))