R удалить строки с наименьшим количеством записей в столбце - PullRequest
0 голосов
/ 19 мая 2018

У меня есть следующий кадр:

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" в идентификаторе столбца.Например, ранг 1 имеет 3x100 идентификатора и 1x 355, а ранг2 имеет 1x300 и 2x400.Я хочу оставить только 3х100 и 2х400, чтобы они выглядели так:

   id  name
1 100 Rank1
2 100 Rank1
3 100 Rank1
4 400 Rank2
5 400 Rank2

Как я могу это сделать?Это будет кратный очень большой набор данных с несколькими рангами и несколькими идентификаторами на ранг.

Спасибо

1 Ответ

0 голосов
/ 19 мая 2018

На основании описания, если мы хотим удалить наименее частые,

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][]

Но, если мы хотим удалить строки, которые не имеют повторяющихся идентификаторов для каждого имени,

df[duplicated(df)|duplicated(df, fromLast = TRUE),]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...