2016-12-04 4 views
1

Ich versuche, das Riverplot-Paket in R zu verwenden, um ein Sankey-Diagramm zu erstellen, aber ich erhalte eine Fehlermeldung über die Spaltennamen im Kantenrahmen.Riverplot-Paket in R - Fehler in Kanten Spaltennamen

ich die Installation der readr und riverplot Pakete und dann dies zu tun:

> my_data <- read_csv("~/RProjects/my_data.csv") 
> 
> edges = rep(my_data, col.names = c("N1","N2","Value")) 
> 
> nodes = data.frame(ID = unique(c(edges$N1, edges$N2))) 
> 
> river <- makeRiver(nodes, edges) 
> 
> return(plot(river)) 

Aber am vorletzten Befehl riverplot Objekt „Fluss“ Ich bekomme Einrichtung dieser Fehler:

Error in checkedges(edges, nodes$ID) 
    edges must have the columns N1, N2 and Value 

Die ursprüngliche CSV verfügt bereits über diese Spaltenüberschriften. Ich bin mir nicht sicher, was ich falsch mache. Ich bin ein kompletter Neuling für R, also sei bitte geduldig, wenn ich das Offensichtliche vermisse!

dput auf meiner CSV-Datei sieht wie folgt aus:

structure(list(N1 = c("Cambridge", "Cambridge", "Cambridge", 
"Cambridge", "Cambridge", "South Cambs", "South Cambs", "South Cambs", 
"South Cambs", "South Cambs", "Rest of East", "Rest of East", 
"Rest of East", "Rest of East", "Rest of East", "Rest of UK", 
"Rest of UK", "Rest of UK", "Rest of UK", "Rest of UK", "Abroad", 
"Abroad", "Abroad", "Abroad", "Abroad"), N2 = c("Cambridge", 
"South Cambs", "Rest of East", "Rest of UK", "Abroad", "Cambridge", 
"South Cambs", "Rest of East", "Rest of UK", "Abroad", "Cambridge", 
"South Cambs", "Rest of East", "Rest of UK", "Abroad", "Cambridge", 
"South Cambs", "Rest of East", "Rest of UK", "Abroad", "Cambridge", 
"South Cambs", "Rest of East", "Rest of UK", "Abroad"), Value = c(106068L, 
1616L, 2779L, 13500L, 5670L, 2593L, 138263L, 2975L, 4742L, 1641L, 
2555L, 3433L, 0L, 0L, 0L, 6981L, 3802L, 0L, 0L, 0L, 5670L, 1641L, 
0L, 0L, 0L)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-25L), .Names = c("N1", "N2", "Value"), spec = structure(list(
    cols = structure(list(N1 = structure(list(), class = c("collector_character", 
    "collector")), N2 = structure(list(), class = c("collector_character", 
    "collector")), Value = structure(list(), class = c("collector_integer", 
    "collector"))), .Names = c("N1", "N2", "Value")), default = structure(list(), class = c("collector_guess", 
    "collector"))), .Names = c("cols", "default"), class = "col_spec")) 

str (Kanten) ergibt:

Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 25 obs. of 3 variables: 
$ N1 : chr "Cambridge" "Cambridge" "Cambridge" "Cambridge" ... 
$ N2 : chr "Cambridge" "South Cambs" "Rest of East" "Rest of UK" ... 
$ Value: int 106068 1616 2779 13500 5670 2593 138263 2975 4742 1641 ... 
- attr(*, "spec")=List of 2 
    ..$ cols :List of 3 
    .. ..$ N1 : list() 
    .. .. ..- attr(*, "class")= chr "collector_character" "collector" 
    .. ..$ N2 : list() 
    .. .. ..- attr(*, "class")= chr "collector_character" "collector" 
    .. ..$ Value: list() 
    .. .. ..- attr(*, "class")= chr "collector_integer" "collector" 
    ..$ default: list() 
    .. ..- attr(*, "class")= chr "collector_guess" "collector" 
    ..- attr(*, "class")= chr "col_spec" 

Antwort

0

Ich glaube, das Problem ist, dass Sie die gewünschte ID Spalte ausgelassen und damit verwirrt der Befehl.

edges = rep(my_data, col.names = c("N1","N2","Value")) 
edges <- data.frame(edges) 
edges$ID <- 1:25 

nodes = data.frame(ID = unique(c(edges$N1, edges$N2))) 

river <- makeRiver(nodes, edges) 

Der obige Code beseitigt die Fehlermeldung. Beachten Sie, dass es eine unabhängige Warnung bezüglich wiederholter Kanteninformationen auslöst.

Warning message: 
In checkedges(edges, nodes$ID) : 
    duplicated edge information, removing 10 edges 
+0

Vielen Dank. Dies fügt den Kanten eine vierte Spalte (ID) hinzu. Aber dann, wenn ich die Zeile makeRiver() ausführe, bekomme ich 'Fehler in den Checks (Kanten, Knoten $ ID): Kanten dürfen nicht die gleichen IDs haben wie Knoten '. Aus irgendeinem Grund nahm es Werte aus der neuen ID-Spalte in Kanten. Ich habe dann versucht, die ID des Knotenrahmens zu setzen, indem ich sie jeweils vollständig spezifizierte, Knoten <- data.frame (ID = c ("Cambridge", "South Cambs", "Rest des Ostens", "Rest of UK", "Abroad")), nach dem ich dann den "duplicate edge information" -Fehler bekomme, den du erwähnt hast. – String

+0

@String Lassen Sie uns eine neue Frage zu diesem Fehler starten, wenn das Problem weiterhin besteht. Wenn du eine neue Frage beginnst, setze den Link hier, damit ich ihn nicht vermisse. Ich werde am Morgen zurückkommen (ca. 9 Stunden). –

+1

Toll, vielen Dank, Sie haben das Problem in der Frage gelöst. Ich denke, dass das nachfolgende "duplicated edge" -Problem war, weil ich auch x und y für die Knoten nicht definiert hatte. Ich bin wieder unterwegs und mache Fortschritte. Wird als separate Frage posten, wenn ich wieder etwas feststelle. – String