我有一个看起来像这样的数据帧:
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
我该怎么做?
您可以先通过company
和eh
对arrange
进行数据处理。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软件包(v1.0.0)于2021-02-11创建
在base R
中,我们可以进行
dat1 <- dat[order(dat$company, dat$eh),]
dat1[!duplicated(dat1$company),]