sac*_*inv 0 r filter dplyr data.table
我有一个 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
Run Code Online (Sandbox Code Playgroud)
很少有 StudentId 的主题列有重复值(例如: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
Run Code Online (Sandbox Code Playgroud)
我无法做到这一点。有任何想法吗。
我们可以在转换为 'data.table' ( )后使用uniquefromdata.table和选项bysetDT(df2)
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
Run Code Online (Sandbox Code Playgroud)
或者distinct来自“df2”
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
Run Code Online (Sandbox Code Playgroud)
或duplicated来自base R
df2[!duplicated(df2[1:2]),]
Run Code Online (Sandbox Code Playgroud)
编辑:基于@David Arenburg 的建议)
| 归档时间: |
|
| 查看次数: |
11787 次 |
| 最近记录: |