2017-10-05 5 views
1

Ich habe mehr als einen Datenrahmen, der wie folgt aussieht: mit vielen Arten in Spalten, die ich hier nicht melden. d1:Übereinstimmende Sites in verschiedenen Datenrahmen in R

Year Region Sites Depth Transect Pharia pyramidatus 
2000 LP  BALLENA  5  1  0.03 
2000 LP  ISLOTES  5  1  0.20 
2000 LP  NORTE  5  1  0.10 
2000 LP  NORTE  20  1  0.00 

d2

Year Region Sites  Depth Transect Pharia pyramidatus 
2010 LP  PLAYA  5  1  0.03 
2010 LP  ISLOTES  5  1  0.20 
2010 LP  NORTE  5  1  0.10 
2010 LP  NORTE  20  1  0.00 

d3

Year Region Sites  Depth Transect Pharia pyramidatus 
2016 LP  BALLENA  5  1  0.03 
2016 LP  ISLOTES  5  1  0.20 
2016 LP  SUR   5  1  0.10 
2016 LP  NORTE  20  1  0.00 

, was ich tun möchte, ist, die sames Websites zu extrahieren (Reef), die nur präsentiert in jeweils Jahre und rbind die Ergebnisse in einen Datenrahmen, der wie folgt aussehen sollte:

Year Region Reef  Depth Transect Pharia pyramidatus 
2000 LP  ISLOTES  5  1  0.20 
2000 LP  NORTE  5  1  0.10 
2000 LP  NORTE  20  1  0.00 
2010 LP  ISLOTES  5  1  0.20 
2010 LP  NORTE  5  1  0.10 
2010 LP  NORTE  20  1  0.00 
2016 LP  ISLOTES  5  1  0.20 
2016 LP  NORTE  20  1  0.00 

Vielen Dank für Sie

+0

Und mit "site" meinst du 'Reef'? – useR

+0

Auch "NORTE" ist nicht in 'd3' enthalten, also warum nimmst du es in" df "auf? – useR

+0

Siehe Lösung für aktualisierte Daten – useR

Antwort

0

helfen Lösung mit dplyr:

library(dplyr) 
rbind(df1, df2, df3) %>% 
    group_by(Reef) %>% 
    filter(n_distinct(Year) == 3) 

Ergebnis:

# A tibble: 8 x 6 
# Groups: Reef [2] 
    Year Region Reef Depth Transect Pharia_pyramidatus 
    <int> <fctr> <fctr> <int> <int>    <dbl> 
1 2000  LP ISLOTES  5  1    0.2 
2 2000  LP NORTE  5  1    0.1 
3 2000  LP NORTE 20  1    0.0 
4 2010  LP ISLOTES  5  1    0.2 
5 2010  LP NORTE  5  1    0.1 
6 2010  LP NORTE 20  1    0.0 
7 2016  LP ISLOTES  5  1    0.2 
8 2016  LP NORTE 20  1    0.0 

Hinweise:

n_distinct zählt die Anzahl der verschiedenen Year für jede Reef (seit I group_by(Reef)). Ich möchte distinct_n == 3, weil ich nur Zeilen zurückgeben möchte, wo Reef einen Datensatz für jede Year hat, in diesem Fall 3 Jahre. In einem allgemeineren Fall, wo es viel mehr Year ‚s ist, möchten Sie vielleicht zuerst die Year Spanne Ihres Datenrahmen finden, und filter auf dieser Grundlage, wie die folgenden:

rbind(df1, df2, df3) %>% 
    mutate(Year_distinct = n_distinct(Year)) %>% 
    group_by(Reef) %>% 
    filter(n_distinct(Year) == Year_distinct) %>% 
    select(-Year_distinct) 

Daten:

df1 = read.table(text = "Year Region Reef  Depth Transect Pharia_pyramidatus 
       2000 LP  BALLENA  5  1  0.03 
       2000 LP  ISLOTES  5  1  0.20 
       2000 LP  NORTE  5  1  0.10 
       2000 LP  NORTE  20  1  0.00", header = TRUE) 

df2 = read.table(text = "Year Region Reef  Depth Transect Pharia_pyramidatus 
       2010 LP  PLAYA  5  1  0.03 
       2010 LP  ISLOTES  5  1  0.20 
       2010 LP  NORTE  5  1  0.10 
       2010 LP  NORTE  20  1  0.00", header = TRUE) 

df3 = read.table(text = "Year Region Reef  Depth Transect Pharia_pyramidatus 
       2016 LP  BALLENA  5  1  0.03 
       2016 LP  ISLOTES  5  1  0.20 
       2016 LP  SUR   5  1  0.10 
       2016 LP  NORTE   20  1  0.00", header = TRUE) 
+0

Danke für Ihre Antwort, löste es das Problem, ich habe eine Frage, wie funktioniert das n_distinct (Jahr) == 3? ist es 3 wegen der drei Datenrahmen? –

+0

@FabioFavoretto In meiner Antwort wurde eine Erklärung hinzugefügt. Ich habe auch eine allgemeinere Version hinzugefügt, für den Fall, dass Sie die Anzahl der Jahresangaben im Datenrahmen nicht fest codieren möchten. – useR

+1

Sie sind fantastisch! Danke für die schnelle und hilfreiche Antwort! –

Verwandte Themen