代码之家  ›  专栏  ›  技术社区  ›  YouLocalRUser

删除重复行,保留第一行

  •  0
  • YouLocalRUser  · 技术社区  · 10 月前

    我正在使用一个关于县行政人员的数据框架。我想进行一项小组研究,分析单位是县年。

    问题是,有时两名或两名以上的县行政人员在同一年任职。我想删除这些半重复的行。我总是想留住排名第一的县行政长官。

    如果我的初始df是:

    df <- data.frame(year= c(2000, 2001, 2001, 2002, 2000, 2001, 2002, 2002, 2002),
                      executive.name= c("Johnson", "Smith", "Peters", "Alleghany", "Roberts", "Clarke", "Tollson", "Brown", "Taschen"),
                      district= c(1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002))
    

    我想让它看起来像这样

    df.neat <- data.frame(year= c(2000, 2001, 2002, 2000, 2001, 2002),
                      executive.name= c("Johnson", "Smith", "Alleghany", "Roberts", "Clarke", "Tollson"),
                      district= rep(c(1001, 1002), each=3))
    
    3 回复  |  直到 10 月前
        1
  •  2
  •   Friede    10 月前

    你可以按地区和年份分组,然后从每组中选取第一行。

    library(dplyr)
    df_neat <- df %>%
      group_by(district, year) %>%
      slice_head(n = 1) %>%
      ungroup()
    
        2
  •  1
  •   simon    10 月前

    您可以通过使用 drop_duplicates pandas中的函数,它将帮助您根据 year district 列,同时保持第一次出现。以下是在Python中如何做到这一点:

    import pandas as pd
    
    # Create the initial DataFrame
    df = pd.DataFrame({
        'year': [2000, 2001, 2001, 2002, 2000, 2001, 2002, 2002, 2002],
        'executive.name': ['Johnson', 'Smith', 'Peters', 'Alleghany', 'Roberts', 'Clarke', 'Tollson', 'Brown', 'Taschen'],
        'district': [1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002]
    })
    
    # Drop duplicates while keeping the first occurrence
    df_neat = df.drop_duplicates(subset=['year', 'district'], keep='first').reset_index(drop=True)
    
    # Display the resulting DataFrame
    df_neat
    

    结果 df_neat 看起来像这样:

       year executive.name  district
    0  2000        Johnson      1001
    1  2001          Smith      1001
    2  2002      Alleghany      1001
    3  2000        Roberts      1002
    4  2001         Clarke      1002
    5  2002        Tollson      1002
    

    此代码确保对于以下各项的每种组合 ,只保留了县行政长官的第一次出现,有效地删除了任何半重复的行。

        3
  •  0
  •   Friede    10 月前

    基地R

    first = \(x) x[1L]
    aggregate(.~year+district, df, first)
    #>   year district executive.name
    #> 1 2000     1001        Johnson
    #> 2 2001     1001          Smith
    #> 3 2002     1001      Alleghany
    #> 4 2000     1002        Roberts
    #> 5 2001     1002         Clarke
    #> 6 2002     1002        Tollson