我有以下框架:
df <- read.table(text = " id name
1 100 Rank1
2 100 Rank1
3 100 Rank1
4 355 Rank1
5 300 Rank2
6 400 Rank2
7 400 Rank2",stringsAsFactors = FALSE, header = TRUE)
我想只保留列ID中具有最多相同“id”的行。例如Rank 1,有3x 100 id和1x 355,rank2有1x300和2x400。我想只保留3x100和2x400所以它看起来像:
id name
1 100 Rank1
2 100 Rank1
3 100 Rank1
4 400 Rank2
5 400 Rank2
我该怎么做?这将是一个非常大的数据集,具有多个等级和每个等级的多个ID。
由于
答案 0 :(得分:0)
根据描述,如果我们想删除频率最低的那些,
library(dplyr)
df %>%
group_by(name, id) %>%
mutate(n = n()) %>%
group_by(name) %>%
filter(n != min(n)) %>%
select(-n)
# A tibble: 5 x 2
# Groups: name [2]
# id name
# <int> <chr>
#1 100 Rank1
#2 100 Rank1
#3 100 Rank1
#4 400 Rank2
#5 400 Rank2
或使用与data.table
library(data.table)
i1 <- setDT(df)[, n := .N, .(name, id)][, .I[n != min(n)], name]$V1
df[i1][, n := NULL][]
但是,如果我们想删除没有重复的内容,那就是&#39; id&#39;对于每个&#39;
df[duplicated(df)|duplicated(df, fromLast = TRUE),]