我有一个像这样的数据集:
id type value
1 001 0 1991
2 001 0 1992
3 001 1 1993
4 001 1 1994
5 002 1 1992
6 002 1 1993
7 003 0 1999
8 003 1 2000
9 003 0 2001
我想先选择类型等于1
的数据集中的行。
最终预期结果应如下:
id type value
3 001 1 1993
4 001 1 1994
5 002 1 1992
6 002 1 1993
8 003 1 2000
9 003 0 2001
我知道首先按id
将其分组。但是我不知道下一步。
有人有什么建议吗?
答案 0 :(得分:2)
使用dplyr
:
library(dplyr)
df %>%
group_by(id) %>%
mutate(sel = cumsum(type)) %>%
filter(sel > 0) %>%
select(id, type, value)
结果:
# A tibble: 6 x 3
# Groups: id [3]
id type value
<int> <int> <int>
1 1 1 1993
2 1 1 1994
3 2 1 1992
4 2 1 1993
5 3 1 2000
6 3 0 2001
以R为底
df[with(df, ave(type, id, FUN = cumsum)) > 0, ]
答案 1 :(得分:1)
您可以为数据的子集分配值,其中每组cumsum
的{{1}}等于或大于1(当然也大于0)。
在id
base R
使用idx <- as.logical(with(DF, ave(type, id, FUN = function(x) cumsum(x) >= 1)))
DF[idx, ]
# id type value
#3 1 1 1993
#4 1 1 1994
#5 2 1 1992
#6 2 1 1993
#8 3 1 2000
#9 3 0 2001
(see this post)
data.table
数据
library(data.table)
setDT(DF)[DF[, .I[cumsum(type) > 0], by = id]$V1]