在r中对连续的整数进行分组并对组进行分析

时间:2015-07-23 17:12:12

标签: r grouping sequence

我有一个数据框,我希望根据整数值是否连续对间隔进行分组,然后找出每个组的最大值和最小值之间的差异。

数据示例:

 x        Integers
 0.1      14
 0.05     15
 2.7      17
 0.07     19
 3.4      20
 0.05     21

因此,第1组由14和15组成,第2组由19,20和21组成。 每组的差异分别为1和2。

我尝试过以下方法,首先对连续值进行分组,但没有运气。

 Breaks <- c(0, which(diff(Data$Integer) != 1), length(Data$Integer)) 

sapply(seq(length(Breaks) - 1), 
     function(i) Data$Integer[(Breaks[i] + 1):Breaks[i+1]])

1 个答案:

答案 0 :(得分:1)

以下是使用by()的解决方案:

df <- data.frame(x=c(0.1,0.05,2.7,0.07,3.4,0.05),Integers=c(14,15,17,19,20,21));
do.call(rbind,by(df,cumsum(c(0,diff(df$Integers)!=1)),function(g) data.frame(imin=min(g$Integers),imax=max(g$Integers),irange=diff(range(g$Integers)),xmin=min(g$x),xmax=max(g$x),xrange=diff(range(g$x)))));
##   imin imax irange xmin xmax xrange
## 0   14   15      1 0.05  0.1   0.05
## 1   17   17      0 2.70  2.7   0.00
## 2   19   21      2 0.05  3.4   3.35

我不确定输出中你想要的数据,所以我只包含了你想要的所有数据。

您可以使用subset(...,irange!=0)过滤掉中间组。