R语言 多列中重复

fhity93d  于 2023-05-04  发布在  其他
关注(0)|答案(2)|浏览(123)

我有一个这样的 Dataframe

> df
  a  b c    d
1 1  2 A 1001
2 2  4 B 1002
3 3  6 B 1002
4 4  8 C 1003
5 5 10 D 1004
6 6 12 D 1004
7 7 13 E 1005
8 8 14 E 1006

我想删除列c和列d中有重复值的行。因此,在本例中,将删除第2、3、5和6行。
我使用了这个,它的工作原理是:

df[!(df$c %in% df$c[duplicated(df$c)] & df$d %in% df$d[duplicated(df$d)]),]
>df
  a  b c    d
1 1  2 A 1001
4 4  8 C 1003
7 7 13 E 1005
8 8 14 E 1006

但这似乎很笨拙,我忍不住想有一个更好的方法。有什么建议吗?
如果有人想重新创建 Dataframe ,这里是dput:

df <- data.frame(
  a = seq(1, 8, by = 1),
  b = c(2, 4, 6, 8, 10, 12, 13, 14),
  c = factor(c("A", "B", "B", "C", "D", "D", "E", "E")),
  d = c(1001, 1002, 1002, 1003, 1004, 1004, 1005, 1006)
)
qv7cva1a

qv7cva1a1#

如果你使用duplicated两次,它就可以工作:

df[!(duplicated(df[c("c","d")]) | duplicated(df[c("c","d")], fromLast = TRUE)), ]

  a  b c    d
1 1  2 A 1001
4 4  8 C 1003
7 7 13 E 1005
8 8 14 E 1006
kqlmhetl

kqlmhetl2#

创建一个包含2列的新对象:

df_dups <- df[c("c", "d")]

现在将其应用于主df:

df[!duplicated(df_dups),]

看起来更整洁,更容易看到/更改您正在使用的列。

相关问题