【问题标题】:How to remove the last N rows on a dataset based on ID in R?如何根据 R 中的 ID 删除数据集的最后 N 行?
【发布时间】:2021-08-29 17:04:30
【问题描述】:

我如何从这样的数据框出发:

ID X Y
1 4 6
1 6 5
1 8 4
1 9 6
2 6 4
2 7 5
2 3 9

到这里:

ID X Y
1 4 6
1 6 5
2 6 4

在本例中,我想删除每个 ID 的最后 2 行。

【问题讨论】:

    标签: r subset


    【解决方案1】:

    您可以使用以下解决方案:

    library(dplyr)
    
    df %>% 
      group_by(ID) %>%
      filter(between(row_number(), 1, n()-2))
    
    # A tibble: 3 x 3
    # Groups:   ID [2]
         ID     X     Y
      <int> <int> <int>
    1     1     4     6
    2     1     6     5
    3     2     6     4
    

    或者这个:

    df %>% 
      group_by(ID) %>%
      slice(1:(n()-2))
    
    # A tibble: 3 x 3
    # Groups:   ID [2]
         ID     X     Y
      <int> <int> <int>
    1     1     4     6
    2     1     6     5
    3     2     6     4
    

    【讨论】:

      【解决方案2】:

      head 的选项在slice 中使用

      library(dplyr)
      df %>% 
         group_by(ID) %>% 
         slice(head(row_number(), -2)) %>% 
         ungroup
      

      -输出

      # A tibble: 3 x 3
           ID     X     Y
        <int> <int> <int>
      1     1     4     6
      2     1     6     5
      3     2     6     4
      

      数据

      df <- structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L), X = c(4L, 
      6L, 8L, 9L, 6L, 7L, 3L), Y = c(6L, 5L, 4L, 6L, 4L, 5L, 9L)), 
        class = "data.frame", row.names = c(NA, 
      -7L))
      

      【讨论】:

        【解决方案3】:

        你可以使用:

        library(dplyr)
         df %>% 
          group_by(ID) %>% 
          filter(row_number() <= n()-2)
        

        输出:

             ID     X     Y
          <int> <int> <int>
        1     1     4     6
        2     1     6     5
        3     2     6     4
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-29
          • 2014-02-04
          • 2022-06-28
          • 1970-01-01
          • 2019-10-20
          • 2023-03-13
          • 2020-03-03
          相关资源
          最近更新 更多