2017-10-16 1 views
0
Finding

Der Iris-Datensatz hat 50 Einträge für jede der drei Arten:R: eindeutige Zeilen in Zusammengeführt Datenrahmen von Outer Join

data('iris') 
table(iris$Species) 

setosa versicolor virginica 
    50   50   50 

mit der Iris in zwei Datenrahmen subsetted Datensatz (mit überlappenden Arten und asymmetrischen Spalten), und mit einem äußeren Mischjoin:

table(SV_VV_merge$Species) 

setosa versicolor virginica 
    50   50   66 
:

# missing Petal.Width 
SV <- subset(iris, Species == 'setosa' | Species == 'virginica', 
      select = c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Species')) 
# missing Sepal.Length 
VV <- subset(iris, Species == 'versicolor' | Species == 'virginica', 
      select = c('Sepal.Width', 'Petal.Length', 'Petal.Width', 'Species')) 
SV_VV_merge <- merge(SV,VV,all=TRUE) 

I 16 zusätzliche Einträge für virginica finden

Wie kann ich sehen, welche Zeilen im zusammengeführten Datenformat Duplikate für die geteilten Spalten 'Sepal.Width' 'Petal.Length' 'Species' für die Spezies 'virginica' haben?

Antwort

1

Wir duplicated

duplicated(SV_VV_merge) 
SV_VV_merge[duplicated(SV_VV_merge), ] 

Ergebnisse durch Zählen der eindeutigen Zeilen

bestätigt werden kann, verwenden
nrow(unique(SV_VV_merge)) 
[1] 154 

Bitte beachten Sie, dass Sie verschiedene Spaltennamen Subsets verschmelzen und möglicherweise nicht die erwarteten Ergebnisse bekommen.

intersect(names(VV), names(SV)) 
[1] "Sepal.Width" "Petal.Length" "Species" 
1

Vielleicht nicht die geradlinig, sondern ein Indikator Spalte zu jedem Datenrahmen hinzufügen und verketten.

SV <- subset(iris, Species == 'setosa' | Species == 'virginica', 
     select = c('Sepal.Length', 'Sepal.Width', 'Petal.Length','Species')) 
SV$sv_src <- "SV" 


# missing Sepal.Length 
VV <- subset(iris, Species == 'versicolor' | Species == 'virginica', 
     select = c('Sepal.Width', 'Petal.Length', 'Petal.Width', 'Species')) 
VV$vv_src <- "VV" 


SV_VV_merge <- merge(SV,VV,all=TRUE) 
SV_VV_merge$row_src <- apply(SV_VV_merge[c("sv_src", "vv_src")], 1, 
         function(x) paste(na.omit(x), collapse = "")) 

SV_VV_merge[, c("Sepal.Width", "Species", 'sv_src', 'vv_src', 'row_src')] 

# Sepal.Width Species sv_src vv_src row_src 
#1   2.0 versicolor <NA>  VV  VV 
#2   2.2 versicolor <NA>  VV  VV 
#3   2.2 versicolor <NA>  VV  VV 
#4   2.2 virginica  SV  VV SVVV 
#5   2.3  setosa  SV <NA>  SV