R 基于列值提取滚动最大值
我对一些数据进行了聚类分析,需要根据人口密度找到断点。集群重叠严重,因此我已按人口密度对数据进行了排序,并希望在“集群”列切换到另一个集群之前提取最后一个值。基本上,数据如下所示:R 基于列值提取滚动最大值,r,dataframe,R,Dataframe,我对一些数据进行了聚类分析,需要根据人口密度找到断点。集群重叠严重,因此我已按人口密度对数据进行了排序,并希望在“集群”列切换到另一个集群之前提取最后一个值。基本上,数据如下所示: cluster PopDens 1 5 1 7 2 8 2 9 1 10 1 12 3 14 1 16 我希望它返回以下内容: Cluster PopDens 1 7 2
cluster PopDens
1 5
1 7
2 8
2 9
1 10
1 12
3 14
1 16
我希望它返回以下内容:
Cluster PopDens
1 7
2 9
1 12
3 14
1 16
如何在R中实现这一点?使用
数据。table
可以使用rleid()
函数进行分组:
library(data.table)
setDT(DF)[, .(PopDens = last(PopDens)), .(rleid(cluster), cluster)][, rleid := NULL][]
# cluster PopDens
#1: 1 7
#2: 2 9
#3: 1 12
#4: 3 14
#5: 1 16
有其他方法可以实现相同的结果:
DF[, .(PopDens = PopDens[.N]), .(rleid(cluster), cluster)][, rleid := NULL][]
DF[, .(PopDens = tail(PopDens, 1), .(rleid(cluster), cluster)][, rleid := NULL][]
DF[, .SD[.N], .(rleid(cluster), cluster)][, rleid := NULL][]
DF[, tail(.SD, 1), .(rleid(cluster), cluster)][, rleid := NULL][]
使用
data.table
可以使用rleid()
函数进行分组:
library(data.table)
setDT(DF)[, .(PopDens = last(PopDens)), .(rleid(cluster), cluster)][, rleid := NULL][]
# cluster PopDens
#1: 1 7
#2: 2 9
#3: 1 12
#4: 3 14
#5: 1 16
有其他方法可以实现相同的结果:
DF[, .(PopDens = PopDens[.N]), .(rleid(cluster), cluster)][, rleid := NULL][]
DF[, .(PopDens = tail(PopDens, 1), .(rleid(cluster), cluster)][, rleid := NULL][]
DF[, .SD[.N], .(rleid(cluster), cluster)][, rleid := NULL][]
DF[, tail(.SD, 1), .(rleid(cluster), cluster)][, rleid := NULL][]
在base R中,可以使用以下方法完成:
x[cumsum(rle(x$cluster)$lengths),]
# cluster PopDens
#2 1 7
#4 2 9
#6 1 12
#7 3 14
#8 1 16
如果您感兴趣,这也可以直接转换为
数据。表
:
library(data.table)
setDT(x)[cumsum(rle(cluster)$lengths)]
当然,我们也可以在dplyr中执行此操作:
library(dplyr)
slice(x, cumsum(rle(cluster)$len))
在base R中,可以使用以下方法完成:
x[cumsum(rle(x$cluster)$lengths),]
# cluster PopDens
#2 1 7
#4 2 9
#6 1 12
#7 3 14
#8 1 16
如果您感兴趣,这也可以直接转换为
数据。表
:
library(data.table)
setDT(x)[cumsum(rle(cluster)$lengths)]
当然,我们也可以在dplyr中执行此操作:
library(dplyr)
slice(x, cumsum(rle(cluster)$len))
另一个
数据表
解决方案:
library(data.table)
setDT(df)[df[, tail(.I,1), rleid(cluster)]$V1]
其中:
另一个
数据表
解决方案:
library(data.table)
setDT(df)[df[, tail(.I,1), rleid(cluster)]$V1]
其中:
巧妙使用
rle
!非常感谢。工作完美。巧妙使用rle
!非常感谢。工作完美。