2015-08-08 4 views
-2

У меня есть таблица местоположения, города и количества объявлений. Некоторые пары местностей и городов являются ошибкой, и там есть ненужные данные. Существует простой алгоритм идентификации фиктивных строк:Найти наибольшее значение в дублированных строках - R

  • Если местность является повтором; реальный город - тот, у которого наибольшее количество списков. Отдых - это манекен

Я хочу, чтобы чистый фрейм данных с удаленными рядами.

выборочные данные ниже:

Locality <- c("Aloc", "Bloc", "Cloc", "Dloc", "Aloc", "ALoc", "Bloc", "Bloc", "Bloc", "Cloc", "Dloc", "Dloc") 

City <- c("A","B","C","D","B","C","A","C","D","D","A","B") 

Listings <- c(25,100,150,30,2,1,2,3,2,1,1,1) 

l <- data.frame(Locality=Locality, City = City,Listings=Listings) 

Результат я хочу это:

Output

+2

Вы можете использовать 'библиотека (dplyr)' и do: 'l%>% group_by (Город) %>% filter (Listings == max (Listings)) 'do get for each City, строка с самым высоким листингом – NicE

+0

Привет, я не ищу местность с наивысшими листингами в каждом городе. Я ищу «город, где данная местность имеет самые высокие списки». Только нужно сделать это для дублированных мест. YOUR algo потерпит неудачу, если есть местность E для города A, которая никогда не дублируется. Он должен появиться в результатах as-is –

+2

в ответе NicE, если вы замените 'group_by (City)' на 'group_by (Locality)', вы должны получить строки с самыми высокими листингами для каждой локации – Whitebeard

ответ

1
dups <- anyDuplicated(l$Locality) 

while (dups != 0){ 
    target <- which(l$Locality == l$Locality[dups]) 
    if (l$Listings[target[1]] >= l$Listings[dups]){ 
     l <- l[-dups, ] 
    } else { 
     l <- l[-target, ] 
    } 
    dups <- anyDuplicated(l$Locality) 
} 

дает

> l 
    Locality City Listings 
1  Aloc A  25 
2  Bloc B  100 
3  Cloc C  150 
4  Dloc D  30 
6  ALoc C  1 
Смежные вопросы