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
通过 company
和 eh
获取数据。 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),]
我有一个如下所示的数据框:
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
通过 company
和 eh
获取数据。 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),]