R 中的 Riverplot 包 - 边缘列名称错误

Riverplot package in R - error in edges column names

我正在尝试使用 R 中的 Riverplot 包来制作 Sankey 图,但我收到有关边框中列名称的错误消息。

我正在安装 readr 和 riverplot 包,然后执行此操作:

> 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))

但是在设置河图的倒数第二条命令中 object "river" 我得到这个错误:

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

原始 CSV 文件中已有这些列标题。我不确定我做错了什么。我是 R 的新手,所以如果我遗漏了明显的地方,请耐心等待!

dput 在我的 CSV 文件中如下所示:

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(edges) 给出:

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"

我认为问题在于您遗漏了必需的 ID 列,因此混淆了命令。

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) 

上面的代码消除了错误信息。请注意,它会引发一个不相关的警告,关于重复的边缘信息。

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