определить повторяющиеся предметы в г - PullRequest
2 голосов
/ 15 марта 2012

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

subject <- c("A-B10", "A101", "A-B10", "C101", "A101", "C01", "A101", "AB101", "A.B10")
idn <- c(101, 102, 104, 100, 98, 102, 90, 102, 78)
sn <- 1:9
mydata <- data.frame (sn, subject, idn)

 sn subject idn
1  1   A-B10 101
2  2    A101 102
3  3   A-B10 104
4  4    C101 100
5  5    A101  98
6  6     C01 102
7  7    A101  90
8  8   AB101 102
9  9   A.B10  78

Я хочу идентифицировать повторяющихся предметов в большом наборе данных.Ожидаемые результаты будут такими:

repeat [1]
 sn subject idn
1  1   A-B10 101
3  3   A-B10 104

repeat [2]
sn subject idn
2  2    A101 102
5  5    A101  98
7  7    A101  90

Правка:

dup <- mydata$subject[duplicated(mydata$subject)]
mydata[mydata$subject %in% dup, ]
  sn subject idn
1  1   A-B10 101
2  2    A101 102
3  3   A-B10 104
5  5    A101  98
7  7    A101  90
lapply(dup, function(x) mydata[mydata$subject == x,])
[[1]]
  sn subject idn
1  1   A-B10 101
3  3   A-B10 104

[[2]]
  sn subject idn
2  2    A101 102
5  5    A101  98
7  7    A101  90

[[3]]
  sn subject idn
2  2    A101 102
5  5    A101  98
7  7    A101  90

Ответы [ 2 ]

6 голосов
/ 15 марта 2012

Например:

> ## dup <- mydata$subject[duplicated(mydata$subject)]
> dup <- unique(mydata$subject[duplicated(mydata$subject)]) ## sorry, edited
> mydata[mydata$subject %in% dup, ]
  sn subject idn
1  1   A-B10 101
2  2    A101 102
3  3   A-B10 104
5  5    A101  98
> lapply(dup, function(x) mydata[mydata$subject == x,])
[[1]]
  sn subject idn
1  1   A-B10 101
3  3   A-B10 104

[[2]]
  sn subject idn
2  2    A101 102
5  5    A101  98
2 голосов
/ 15 марта 2012

Здесь другой подход. Сначала разделите все данные по темам, а затем оставьте только те, которые имеют более одной записи.

sets <- split(mydata, mydata$subject)
Filter(function(x) {nrow(x)>1}, sets)

Если вам не нужен промежуточный продукт, он может быть встроен.

Filter(function(x) {nrow(x)>1}, split(mydata, mydata$subject))

, что дает

> Filter(function(x) {nrow(x)>1}, split(mydata, mydata$subject))
$`A-B10`
  sn subject idn
1  1   A-B10 101
3  3   A-B10 104

$A101
  sn subject idn
2  2    A101 102
5  5    A101  98
7  7    A101  90
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...