2012-03-15 52 views
2

,我有以下數據重複主題:確定r中

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 

回答

6

例如:

> ## 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 
+0

「A101」 被重複了三次 - 不識別所有三個。 – jon 2012-03-15 15:19:19

+0

@JohnC - 您的主題矢量中的元素8是「AB101」(而不是「A101」,因爲它出現在您打印的data.frame中,並且您打算這樣做),所以eusebe的代碼工作得很好在你實際提供的數據集上。乾杯。 – 2012-03-15 15:50:37

+0

@ JoshO'Brien O'Brien我不是在說2,5和7,而是8 – jon 2012-03-15 17:37:38

2

這是一種不同的方法。首先按主題拆分所有數據,然後只保留具有多個條目的數據。

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