Unten passend ist die Zusammenfassung und die Struktur der beiden Datensätze Ich habe versucht claimants
und unemp
zu verschmelzen, sie können mich hier claims.csv gefunden und unemp.csvverschmelzen zwei Datenrahmen basierend auf Reihen von mehreren Spalten
> tbl_df(claimants)
# A tibble: 6,960 × 5
X County Month Year Claimants
<int> <fctr> <fctr> <int> <int>
1 1 ALAMEDA Jan 2007 13034
2 2 ALPINE Jan 2007 12
3 3 AMADOR Jan 2007 487
4 4 BUTTE Jan 2007 3496
5 5 CALAVERAS Jan 2007 644
6 6 COLUSA Jan 2007 1244
7 7 CONTRA COSTA Jan 2007 8475
8 8 DEL NORTE Jan 2007 328
9 9 EL DORADO Jan 2007 2120
10 10 FRESNO Jan 2007 19974
# ... with 6,950 more rows
> tbl_df(unemp)
# A tibble: 6,960 × 7
County Year Month laborforce emplab unemp unemprate
* <chr> <int> <chr> <int> <int> <int> <dbl>
1 Alameda 2007 Jan 743100 708300 34800 4.7
2 Alameda 2007 Feb 744800 711000 33800 4.5
3 Alameda 2007 Mar 746600 713200 33300 4.5
4 Alameda 2007 Apr 738200 705800 32400 4.4
5 Alameda 2007 May 739100 707300 31800 4.3
6 Alameda 2007 Jun 744900 709100 35800 4.8
7 Alameda 2007 Jul 749600 710900 38700 5.2
8 Alameda 2007 Aug 746700 709600 37000 5.0
9 Alameda 2007 Sep 748200 712100 36000 4.8
10 Alameda 2007 Oct 749000 713000 36100 4.8
# ... with 6,950 more rows
Ich dachte, zuerst sollte ich alle factor
Spalten zu character
Spalten ändern.
unemp[sapply(unemp, is.factor)] <- lapply(unemp[sapply(unemp, is.factor)], as.character)
claimants[sapply(claimants, is.factor)] <- lapply(claimants[sapply(claimants, is.factor)], as.character)
m <-merge(unemp, claimants, by = c("County", "Month", "Year"))
dim(m)
[1] 0 10
In der Ausgabe von dim(m)
sind 0 Zeilen in dem resultierenden Datenrahmen. Alle 6960 Zeilen sollten eindeutig übereinstimmen.
Um sicherzustellen, dass die beiden Datenrahmen einzigartige Kombination aus der die drei Säulen ‚Kreis‘ haben, ‚Monat‘ und ‚Jahr‘ ich neu anordnen und diese Spalten innerhalb der Datenrahmen neu anordnen, wie unten:
a <- claimants[ order(claimants[,"County"], claimants[,"Month"], claimants[,"Year"]), ]
b <- unemp[ order(unemp[,"County"], unemp[,"Month"], unemp[,"Year"]), ]
b[2:4] <- b[c(2,4,3)]
a[2:4] %in% b[2:4]
[1] TRUE TRUE TRUE
Diese letzte Ausgabe bestätigt, dass alle Spalten "County", "Month" und "Year" in diesen beiden Datenfeldern übereinstimmen.
Ich habe versucht, Blick in die Dokumentation für merge
und konnte nicht sammle, wo ich schief gehen, ich habe auch die inner_join
Funktion von dplyr
versucht:
> m <- inner_join(unemp[2:8], claimants[2:5])
Joining, by = c("County", "Year", "Month")
> dim(m)
[1] 0 8
Ich bin etwas fehlt und weiß nicht, was , würde die Hilfe beim Verstehen dieses wissen, ich weiß, ich sollte die Zeilen nicht um die drei Spalten neu sortieren müssen, um zu laufen merge
R sollte die übereinstimmenden Zeilen identifizieren und die nicht übereinstimmenden Spalten zusammenführen.
ALAMEDA! = Alameda –