【问题标题】:When repeated values in a dataframe, only keep the first value per id [duplicate]在数据框中重复值时,仅保留每个 id 的第一个值 [重复]
【发布时间】:2021-02-19 05:05:33
【问题描述】:

在数据框中,我有一列有时具有相同 id 的重复值,即 A 列。当 A 列中相同 id 的值相似时,我只想保留第一个。想象一个大数据集。我该如何做到这一点?谢谢!

A <- c(18,6,39,39,3,56)
set.seed(1)
B <- sample(100,6)
set.seed(2)
C <- sample(100,6)


df <- data.frame(id = rep(1:3, each=2),A,B,C)
df
 id  A  B  C
1  1 18 68 85
2  1  6 39 79
3  2 39  1 70
4  2 39 34  6
5  3  3 87 32
6  3 56 43  8

id <- unique(df$id)

if (i in 1:length(id)){
  df[df$id==i,]
  if(length(df[df$A])>1){
    keep the first
  }
     else{
       return(df)
     }
}

Expected output:
 id  A  B  C
1  1 18 68 85
2  1  6 39 79
3  2 39  1 70
5  3  3 87 32
6  3 56 43  8

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以在idA 列上使用duplicated

    df[!duplicated(df[1:2]), ]
    
    #  id  A  B  C
    #1  1 18 68 85
    #2  1  6 39 79
    #3  2 39  1 70
    #5  3  3 87 32
    #6  3 56 43  8
    

    数据

    df <- structure(list(id = c(1L, 1L, 2L, 2L, 3L, 3L), A = c(18L, 6L, 
    39L, 39L, 3L, 56L), B = c(68L, 39L, 1L, 34L, 87L, 43L), C = c(85L, 
    79L, 70L, 6L, 32L, 8L)), class = "data.frame", row.names = c("1", 
    "2", "3", "4", "5", "6"))
    

    【讨论】:

    • 谢谢!如何在 for 循环中完成?
    • for 循环对于这项任务来说似乎太复杂了。
    【解决方案2】:

    dplyr中使用它

    library(dplyr)
    df %>% group_by(id, A) %>% slice_head() 
    
    # A tibble: 5 x 4
    # Groups:   id, A [5]
         id     A     B     C
      <int> <int> <int> <int>
    1     1     6    39    79
    2     1    18    68    85
    3     2    39     1    70
    4     3     3    87    32
    5     3    56    43     8
    

    【讨论】:

      猜你喜欢
      • 2023-01-10
      • 2020-08-17
      • 1970-01-01
      • 2021-05-15
      • 2021-08-19
      • 2017-04-20
      • 2018-07-26
      • 2017-08-01
      • 1970-01-01
      相关资源
      最近更新 更多