我试图从我的 R 数据框中提取行,其中 ID 列具有相同的值而 pt 列具有不同的值。 例如,如果我的数据框如下所示:
ID pt
600 DC90
600 DC90
612 DC18
612 DC02
612 DC02
630 DC30
645 DC16
645 DC16
645 DC16
我想要的输出如下所示:
ID pt
612 DC18
612 DC02
612 DC02
因为 ID 612 有两个不同的点号
答案 0 :(得分:2)
我们可以对 ID 和 filter
个 ID 进行分组,其中 'pt' 中不同元素的数量大于 1
library(dplyr)
df1 %>%
group_by(ID) %>%
filter(n_distinct(pt) > 1)
-输出
# A tibble: 3 x 2
# Groups: ID [1]
# ID pt
# <int> <chr>
#1 612 DC18
#2 612 DC02
#3 612 DC02
如果是检查所有元素应该不同
df1 %>%
group_by(ID) %>%
filter(n_distinct(pt) == n())
df1 <- structure(list(ID = c(600L, 600L, 612L, 612L, 612L, 630L, 645L,
645L, 645L), pt = c("DC90", "DC90", "DC18", "DC02", "DC02", "DC30",
"DC16", "DC16", "DC16")), class = "data.frame", row.names = c(NA,
-9L))
答案 1 :(得分:2)
使用 data.table
的 uniqueN
选项,按 ID
分组
> setDT(df)[, .SD[uniqueN(pt) > 1], ID]
ID pt
1: 612 DC18
2: 612 DC02
3: 612 DC02
数据
> dput(df)
structure(list(ID = c(600L, 600L, 612L, 612L, 612L, 630L, 645L,
645L, 645L), pt = c("DC90", "DC90", "DC18", "DC02", "DC02", "DC30",
"DC16", "DC16", "DC16")), class = "data.frame", row.names = c(NA,
-9L))