在数据框中,我有一列有时具有相同 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
答案 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)
您可以在 duplicated
和 id
列上使用 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"))