2016-06-21 8 views
0

Entschuldigen Sie, wenn der Titel verwirrend ist, war nicht sicher, wie man dieses Problem beschreibt. Ok, so habe ich einen Datenrahmen mit einer Spalte, die Stichprobenort ist, von denen ich viele habe, und eine Spalte, die Stichprobenmethode ist, von denen es nur zwei gibt. Hier ist eine vereinfachte Version:Auswählen von Daten basierend auf verschiedenen Werten in der gleichen Spalte und dem eindeutigen Wert in einer anderen Spalte in R

site <- c("X", "Y", "X","Z") 
method <- c("A", "B", "B", "A") 
data <- data.frame(site, method) 
data 
    site method 
1 X  A 
2 Y  B 
3 X  B 
4 Z  A 

Jetzt hätten einige Seiten abgetastet unter Verwendung sowohl Probenahme Verfahren A und B, und einige wurden abgetastet nur Verfahren A oder B.

Ich versuche, nur die Seiten zu wählen das wurde mit beiden Methoden abgetastet. Zum Beispiel würde sich die Ausgabe für diese Daten wie folgt aus:

 site method 
    1 X  A 
    2 X  B 

Ich habe keinen Beispielcode haben, weil ich nicht ehrlich wissen, wie dies zu tun. Bitte helfen Sie!

+2

ähnlich sein würde - http://stackoverflow.com/questions/21421031/eliminate-groups-which-have-different-values-in- r/21421184 - und die damit verbundenen Fragen sind auch sehr ähnlich. – thelatemail

Antwort

2

Wir können data.table verwenden. Konvertieren Sie den 'data.frame' in 'data.table' (setDT(data)), gruppiert nach 'site', if Die Länge der eindeutigen 'Methode' ist größer als 1, dann erhalten Sie die Subset von Data.table.

library(data.table) 
setDT(data)[, if(uniqueN(method)>1) .SD , by = site] 

Oder mit dplyr, können wir es tun.

library(dplyr) 
data %>% 
    group_by(site) %>% 
    filter(n_distinct(method)>1) 

Eine mögliche Option base R

data[ with(data, ave(method, site, FUN = function(x) length(unique(x))>1)),]