首页 > 解决方案 > 如何根据一列的数量按组减少行数?

问题描述

我想根据“计数”列中分配的数字按组(“组”列)从我的数据框中剪切行。

数据看起来像这样

Group       Count    Result      Result 2
  <chr>     <dbl>  <dbl>        <dbl>
1 Ane           3      5           NA
2 Ane           3      6            5
3 Ane           3      4            5
4 Ane           3      8            5
5 Ane           3      7            8
6 John          2      9           NA
7 John          2      2           NA
8 John          2      4            2
9 John          2      3            2

预期成绩

Group       Count    Result      Result 2
  <chr>     <dbl>    <dbl>        <dbl>
1 Ane           3      5           NA
2 Ane           3      6            5
3 Ane           3      4            5
6 John          2      9           NA
7 John          2      2           NA

谢谢!

标签: rrows

解决方案


我们可以在按'Group'分组后使用'Count'slice的值first

library(dplyr)
df1 %>% 
    group_by(Group) %>% 
    slice(seq_len(first(Count))) %>%
    ungroup

-输出

# A tibble: 5 × 4
  Group Count Result Result2
  <chr> <int>  <int>   <int>
1 Ane       3      5      NA
2 Ane       3      6       5
3 Ane       3      4       5
4 John      2      9      NA
5 John      2      2      NA

或者使用filterwithrow_number()创建一个逻辑向量

df1 %>% 
   group_by(Group) %>% 
   filter(row_number() <= Count) %>%
   ungroup

数据

df1 <- structure(list(Group = c("Ane", "Ane", "Ane", "Ane", "Ane", "John", 
"John", "John", "John"), Count = c(3L, 3L, 3L, 3L, 3L, 2L, 2L, 
2L, 2L), Result = c(5L, 6L, 4L, 8L, 7L, 9L, 2L, 4L, 3L), Result2 = c(NA, 
5L, 5L, 5L, 8L, NA, NA, 2L, 2L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9"))

推荐阅读