Select 在 R 中使用 distinct 函数时要保留哪些行

Select which rows to keep when using the distinct function in R

我有一个如下所示的数据框:

  company eh
1       A  1
2       A  3
3       B  2
4       C  2
5       C  1
6       D  3
7       E  1
8       F  3
9       F  1

如您所见,我有重复的公司 A、C 和 F 行。这是因为有些公司可以在 'eh' 列中同时取值 1、2 和 3 .我想最终每个公司只有一行,所以我 运行 这个代码:

df <- distinct(df, company, .keep_all = TRUE)

这导致:

  company eh
1       A  1
2       B  2
3       C  2
4       D  3
5       E  1
6       F  3

但是,这会从 'eh' 列中删除随机行。但是我希望 'eh' 列的值是 1 而不是 2 和 3。换句话说,如果公司的 'eh' 值同时出现在 1 和 3 上,我宁愿保留该行值为 1。所以我想得到这样的结果(删除第 2、4 和 8 行):

  company eh
1       A  1
2       B  2
3       C  1
4       D  3
5       E  1
6       F  1

我该怎么做?

您可以先 arrange 通过 companyeh 获取数据。 distinct 将保留第一行:

dat <- read.table(text = "company eh
1       A  1
2       A  3
3       B  2
4       C  2
5       C  1
6       D  3
7       E  1
8       F  3
9       F  1", header = TRUE)

library(dplyr)

dat %>% 
  arrange(company, eh) %>% 
  distinct(company, .keep_all = TRUE)
#>   company eh
#> 1       A  1
#> 3       B  2
#> 5       C  1
#> 6       D  3
#> 7       E  1
#> 9       F  1

reprex package (v1.0.0)

于 2021 年 2 月 11 日创建

base R中,我们可以做到

dat1 <- dat[order(dat$company, dat$eh),]
dat1[!duplicated(dat1$company),]