我有一个数据框,我想用它根据整数值是否连续对间隔进行分组,然后找到每组的最大值和最小值之间的差。
数据示例:
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]])
最佳答案
这是使用 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)
过滤掉中间组。
关于r - 对 r 中的连续整数进行分组并对组进行分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593954/