我有一个数据框,我希望根据整数值是否连续对间隔进行分组,然后找出每个组的最大值和最小值之间的差异。
数据示例:
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]])
答案 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)
过滤掉中间组。