当数据框中的重复值时,只保留每个 id 的第一个值

时间:2021-02-19 05:05:33

标签: r

在数据框中,我有一列有时具有相同 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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

您可以在 duplicatedid 列上使用 A

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"))
相关问题