【问题标题】:How can I cut an amount of rows by group based in the number of one column?如何根据一列的数量按组减少行数?
【发布时间】:2021-12-22 11:06:32
【问题描述】:

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

数据看起来像这样

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

谢谢!

【问题讨论】:

    标签: r rows


    【解决方案1】:

    在按“Group”分组后,我们可以在“Count”的first 值上使用slice

    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
    

    或者使用filterrow_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"))
    

    【讨论】:

    • +1 表示slice() 实现。这是一种简洁优雅的方式,包括使用first()。我会选择更标准的第二种选择。
    • 非常感谢,它对我有用!
    猜你喜欢
    • 2021-07-19
    • 2018-10-18
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2016-05-17
    • 2021-01-09
    相关资源
    最近更新 更多