【问题标题】:Filter duplicated rows in R data.frame [duplicate]过滤R data.frame中的重复行[重复]
【发布时间】:2016-05-18 10:35:24
【问题描述】:

我有一个如下所示的 data.frame。

> df2 <- data.frame("StudentId" = c(1,1,1,2,2,3,3), "Subject" = c("Maths", "Maths", "English","Maths", "English", "Science", "Science"), "Score" = c(100,90,80,70, 60,20,10))
> df2
  StudentId Subject Score
1         1   Maths   100
2         1   Maths    90
3         1 English    80
4         2   Maths    70
5         2 English    60
6         3 Science    20
7         3 Science    10

很少有 StudentIds,列 Subject 有重复的值(例如:ID 1 有 2 个“数学”条目。我只需要保留重复行中的第一个。 预期的 data.frame 是:

  StudentId Subject Score
1         1   Maths   100
3         1 English    80
4         2   Maths    70
5         2 English    60
6         3 Science    20

我无法做到这一点。 任何想法。

【问题讨论】:

标签: r filter data.table dplyr


【解决方案1】:

在转换为 'data.table' (setDT(df2)) 后,我们可以使用 data.table 中的 uniqueby 选项

library(data.table)
unique(setDT(df2), by = c("StudentId", "Subject"))
#   StudentId Subject Score
#1:         1   Maths   100
#2:         1 English    80
#3:         2   Maths    70
#4:         2 English    60
#5:         3 Science    20

或来自“df2”的distinct

library(dplyr)
distinct(df2, StudentId, Subject)
#     StudentId Subject Score
#       (dbl)  (fctr) (dbl)
#1         1   Maths   100
#2         1 English    80
#3         2   Maths    70
#4         2 English    60
#5         3 Science    20

duplicated 来自base R

df2[!duplicated(df2[1:2]),]

编辑:基于@David Arenburg 的建议)

【讨论】:

  • 我想只是unique(setDT(df2), by = c("StudentId", "Subject"))?或distinct(df2, StudentId, Subject)?
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 2020-05-24
  • 2016-11-09
  • 2013-12-04
相关资源
最近更新 更多