我需要提取最小和最大之间的观察数。我知道我可以对数据进行子集处理,创建一个新的DF,然后计算长度,但是对较少涉及的过程感兴趣。例如,我有并且想要观察从最小到最大的数量,
ddd <- mydf[,list(minVar1 = min(Var1, na.rm=TRUE),
maxVar1 = max(Var1, na.rm=TRUE)), by="Group"]
是否有没有中间DF的直接方法?谢谢。
编辑:我想这比最初所说的要复杂一些。对于Group = 1,最小值实际上是2,但是我需要最小值索引低于最大值索引/位置。因此,对于3的长度,该范围是3到7。Idx变量对Var1的测量索引/位置进行评分。因此,必须首先确定Var1的最大位置,然后确保从Idx提取的最小位置小于最大位置。
Group Var1 Idx
1 3 4
1 5 5
1 7 6
1 3 7
1 2 8
2 5 12
2 6 13
2 9 14
2 11 15
2 5 16
Group min max length
1 3 7 3
2 5 11 4
通过使用data.table
,我们可以获得预期的输出。我们将'data.frame'转换为'data.table'(setDT(df1)
)。通过“组”分组,我们order
得到“ Idx”,得到最大值“ Var1”(“ ind”)的位置,然后得到“ Var1”最小值的位置,该值低于“ ind”(“ ind2')。我们通过在'Var1'上索引'ind2'和'ind'来总结和创建列'min'和'max',而'length'是通过使用相同的'ind',' ind2”并添加1。
library(data.table)
setDT(df1)[order(Idx), {ind <- which.max(Var1)
ind2=which.min(Var1[seq(ind)])
list(min=Var1[ind2],
max=Var1[ind],
length=Idx[ind]-Idx[ind2]+1)} , Group]
# Group min max length
#1: 1 3 7 3
#2: 2 5 11 4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句