R中组内的子集数据帧

时间:2017-11-07 18:04:12

标签: r subset

我有一个像这样的数据框

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)

1 个答案:

答案 0 :(得分:2)

我们根据“排名”列的相邻元素之间的差异创建f,创建逻辑vector,使用cumsumsplit将其转换为数字基于那个

split(df, cumsum(c(TRUE, diff(df$Rank) < 0)))