如何保持真正的独特行?
How to keep the true uniques row?
这里是一个矩阵的例子,
A
B
C
1
1
1
1
1
4
1
2
4
2
1
1
3
1
1
3
1
2
我只想提取在 A 和 B 中唯一的行。
我不能使用 unique、duplicate 等,因为它们总是保留我重复的行之一。
我希望得到的最终结果是:
A
B
C
1
2
4
2
1
1
我该怎么做?
谢谢
这里有几个选项 -
- 基础 R -
cols <- c('A', 'B')
res <- df[!(duplicated(df[cols]) | duplicated(df[cols], fromLast = TRUE)), ]
res
# A B C
#3 1 2 4
#4 2 1 1
dplyr
-
library(dplyr)
df %>% group_by(A, B) %>% filter(n() == 1) %>% ungroup
# A tibble: 2 x 3
# A B C
# <int> <int> <int>
#1 1 2 4
#2 2 1 1
data.table
df <- data.frame(
A = c(1L, 1L, 1L, 2L, 3L, 3L),
B = c(1L, 1L, 2L, 1L, 1L, 1L),
C = c(1L, 4L, 4L, 1L, 1L, 2L)
)
library(data.table)
setDT(df)[, .SD[.N == 1], by = list(A, B)]
#> A B C
#> 1: 1 2 4
#> 2: 2 1 1
由 reprex package (v2.0.1)
于 2022-02-28 创建
这里是一个矩阵的例子,
A | B | C |
---|---|---|
1 | 1 | 1 |
1 | 1 | 4 |
1 | 2 | 4 |
2 | 1 | 1 |
3 | 1 | 1 |
3 | 1 | 2 |
我只想提取在 A 和 B 中唯一的行。 我不能使用 unique、duplicate 等,因为它们总是保留我重复的行之一。
我希望得到的最终结果是:
A | B | C |
---|---|---|
1 | 2 | 4 |
2 | 1 | 1 |
我该怎么做? 谢谢
这里有几个选项 -
- 基础 R -
cols <- c('A', 'B')
res <- df[!(duplicated(df[cols]) | duplicated(df[cols], fromLast = TRUE)), ]
res
# A B C
#3 1 2 4
#4 2 1 1
dplyr
-
library(dplyr)
df %>% group_by(A, B) %>% filter(n() == 1) %>% ungroup
# A tibble: 2 x 3
# A B C
# <int> <int> <int>
#1 1 2 4
#2 2 1 1
data.table
df <- data.frame(
A = c(1L, 1L, 1L, 2L, 3L, 3L),
B = c(1L, 1L, 2L, 1L, 1L, 1L),
C = c(1L, 4L, 4L, 1L, 1L, 2L)
)
library(data.table)
setDT(df)[, .SD[.N == 1], by = list(A, B)]
#> A B C
#> 1: 1 2 4
#> 2: 2 1 1
由 reprex package (v2.0.1)
于 2022-02-28 创建