R删除列中条目最少的行

时间:2018-05-19 18:26:25

标签: r

我有以下框架:

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。

由于

1 个答案:

答案 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),]