【发布时间】:2017-11-07 18:04:12
【问题描述】:
我有一个这样的数据框
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)
【问题讨论】:
-
试试
split即。split(df, cumsum(c(TRUE, diff(df$Rank) < 0))) -
是的,虽然它会返回一个列表,但对我还是有好处的
-
akrun 你能把这个作为答案发布吗,我会接受的
-
cumsum(...diff(...) <condition>)成语的规范帖子:How to partition a vector into groups of regular, consecutive sequences?