在R中选择高达某个值的行



我有以下数据帧:

df1 <- data.frame(ID = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2),
var1 = c(0, 2, 3, 4, 2, 5, 6, 10, 11, 0, 1, 2, 1, 5, 7, 10))

我只想选择包含最多5个值的行,一旦达到5,我希望它转到下一个ID,并只为该组选择最多5个的值,这样最终结果会是这样的:

ID      var1
1        0
1        2
1        3
1        4
1        2
1        5
2        0
2        1
2        2
2        1
2        5 

我想试试dplyr,因为它是我最熟悉的。

您可以使用which.max()来查找var1>=5,然后提取行号在其前面的那些行。

library(dplyr)
df1 %>%
group_by(ID) %>%
filter(row_number() <= which.max(var1 >= 5)) %>%
ungroup()

df1 %>%
group_by(ID) %>%
slice(1:which.max(var1 >= 5)) %>%
ungroup()
# # A tibble: 11 × 2
#       ID  var1
#    <dbl> <dbl>
#  1     1     0
#  2     1     2
#  3     1     3
#  4     1     4
#  5     1     2
#  6     1     5
#  7     2     0
#  8     2     1
#  9     2     2
# 10     2     1
# 11     2     5

最新更新