Избавьтесь от строк с дублирующимися атрибутами в R - PullRequest
12 голосов
/ 03 мая 2010

У меня большой массив данных с такими столбцами, как:

ID, time, OS, IP

Каждая строка этого фрейма данных соответствует одной записи. В этом кадре данных для некоторых идентификаторов существует несколько записей (строк). Я хотел бы избавиться от этих нескольких строк (очевидно, другие атрибуты будут отличаться для того же идентификатора). Или поставить иначе: мне нужна только одна запись (строка) для каждого идентификатора.

Когда я использую unique в столбце идентификатора, я получаю только уровни (или каждый уникальный идентификатор), но я хочу сохранить и другие атрибуты. Я пытался использовать apply(x,2,unique(data$ID)), но это тоже не работает.

Ответы [ 2 ]

28 голосов
/ 03 мая 2010
subset(data,!duplicated(data$ID))

Должен сделать трюк

3 голосов
/ 03 мая 2010

Если вы хотите сохранить одну строку для каждого идентификатора, но в каждой строке есть разные данные, то вам нужно определиться с логикой для отбрасывания дополнительных строк. Например:

df <- data.frame(ID=c(1, 2, 2, 3), time=1:4, OS="Linux")
df
  ID time    OS
1  1    1 Linux
2  2    2 Linux
3  2    3 Linux
4  3    4 Linux

Теперь я сохраню максимальное значение времени и последнее значение ОС:

library(plyr)
unique(ddply(df, .(ID), function(x) data.frame(ID=x[,"ID"], time=max(x$time), OS=tail(x$OS,1))))
  ID time    OS
1  1    1 Linux
2  2    3 Linux
4  3    4 Linux
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...