我有一个像这样的数据框
ID <- c(1)
Rank <- c(1,2,3,1,2)
Val <- c(10,20,30,40,50)
df <- data.frame(ID,Rank,Val)
df
ID Rank Val
1 1 1 10
2 1 2 20
3 1 3 30
4 1 1 40
5 1 2 50
在每个ID中,如何对数据帧进行子集化,使得我有两个不同的帧
df1:
ID Rank Val
1 1 1 10
2 1 2 20
3 1 3 30
df2:
ID Rank Val
4 1 1 40
5 1 2 50
每个ID的总长度可能会有所不同。因此,有时我的排名可能会像1,2,1,2
。在这种情况下,两个帧将是(1,2)和(1,2)
答案 0 :(得分:2)
我们根据“排名”列的相邻元素之间的差异创建f
,创建逻辑vector
,使用cumsum
和split
将其转换为数字基于那个
split(df, cumsum(c(TRUE, diff(df$Rank) < 0)))