我有以下两列的数据集
x y
1 3
1 4
1 5
1 4
1 2
2 6
2 3
2 4
2 4
3 4
3 2
3 4
3 4
3 6
3 2
对于给定的x,我想删除所有重复的y。所以我想删除第4,9,12,13,15行。我不想删除任何y = 3行,因为即使它们重复,它们也会出现不同的x
值答案 0 :(得分:0)
您可以使用data.table
library(data.table)
setDT(df)[df[, !duplicated(y), by=x]$V1]
# x y
#1: 1 3
#2: 1 4
#3: 1 5
#4: 1 2
#5: 2 6
#6: 2 3
#7: 2 4
#8: 3 4
#9: 3 2
#10: 3 6
@David Arenburg建议的其他选项,@ Arun
setDT(df)[, .SD[!duplicated(y)], by = x]
unique(setDT(df), by=c("x", "y"))
df <- structure(list(x = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L,
3L, 3L, 3L, 3L, 3L), y = c(3L, 4L, 5L, 4L, 2L, 6L, 3L, 4L, 4L,
4L, 2L, 4L, 4L, 6L, 2L)), .Names = c("x", "y"), class = "data.frame", row.names =
c(NA, -15L))
答案 1 :(得分:0)
使用ave
和duplicated
的方法:
> subset(dat, !ave(y, x, FUN = duplicated))
x y
1 1 3
2 1 4
3 1 5
5 1 2
6 2 6
7 2 3
8 2 4
10 3 4
11 3 2
14 3 6
答案 2 :(得分:0)
如果您的数据中只有两列,请执行unique(df)
(如前所述)。
如果您有两列以上,那么您还可以尝试dplyr
的包distinct
功能,以便明确指定x
和y
library(dplyr)
distinct(df, x, y)
# x y
# 1 1 3
# 2 1 4
# 3 1 5
# 4 1 2
# 5 2 6
# 6 2 3
# 7 2 4
# 8 3 4
# 9 3 2
# 10 3 6
答案 3 :(得分:0)
当我寻找类似的答案时,我意识到这里缺少使用重复的方法。 您可以简单地使用duplicated()函数并传递不同的列。 您可以根据需要在任意列上执行此操作。它将在搜索重复行时考虑列。
df <- data.frame(matrix(data=c(1,2,1,4,1,3,1,4,2,2,2,5,2,4), ncol=2, byrow = T))
> duplicated(df[, c(1,2)])
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE
toremove <- duplicated(df[, c(1,2)])
df <- df[!toremove, ]
或直接
df <- df[!duplicated(df[, c(1,2)]), ]
duplicated()函数非常方便。