Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:crosstalk::当tidyverse动词不'时,共享数据以不同格式(宽/长)链接数据;行不通_R_Plotly_Tidyverse_Dt_Crosstalk - Fatal编程技术网

R:crosstalk::当tidyverse动词不'时,共享数据以不同格式(宽/长)链接数据;行不通

R:crosstalk::当tidyverse动词不'时,共享数据以不同格式(宽/长)链接数据;行不通,r,plotly,tidyverse,dt,crosstalk,R,Plotly,Tidyverse,Dt,Crosstalk,编辑TL;DR 使用crosstalkpackage,我正在寻找一种方法,将使用长格式数据(线形图)的图形与具有宽格式数据的交互式表格链接起来,以便表格中的每一行对应于绘图中的一条线 我正在尝试将DT表与绘图仪链接。我的问题在于图形需要长格式的数据,而表格需要宽格式的数据。我可能是迷恋上了整洁的做事方式。我将尝试提供一个最简单的例子,说明我正在尝试做什么以及我希望获得什么 设置: library(tidyverse) library(crosstalk) library(plotly) libr

编辑TL;DR 使用
crosstalk
package,我正在寻找一种方法,将使用长格式数据(线形图)的图形与具有宽格式数据的交互式表格链接起来,以便表格中的每一行对应于绘图中的一条线

我正在尝试将DT表与绘图仪链接。我的问题在于图形需要长格式的数据,而表格需要宽格式的数据。我可能是迷恋上了整洁的做事方式。我将尝试提供一个最简单的例子,说明我正在尝试做什么以及我希望获得什么

设置:

library(tidyverse)
library(crosstalk)
library(plotly)
library(DT)

# Wide format
df_test1 <- data.frame(
  id = c("id1", "id2"),
  item1 = c(0, 4),
  item2 = c(3, 2),
  item3 = c(1, 4),
  item4 = c(3, 4),
  item5 = c(1, NA)
)

# Reshaped to long format
df_test2 <- 
  df_test1 %>%
  tidyr::pivot_longer(cols = item1:item5, names_to = "item", values_to = "value") %>%
  dplyr::mutate(item = as.factor(item)) %>%
  dplyr::mutate(value = factor(as.character(value), levels = c("0", "1", "2", "3", "4")))
sd1 <- SharedData$new(df_test1, key = ~id)

bscols(
  ggplotly(
    sd1$origData() %>%    # should be sd1, but returns error
      # reshaping
      tidyr::pivot_longer(cols = item1:item5, names_to = "item", values_to = "value") %>%
      dplyr::mutate(item = as.factor(item)) %>%
      dplyr::mutate(value = factor(as.character(value), levels = c("0", "1", "2", "3", "4"))) %>%
      # ploting
      ggplot(., aes(x = value, y = item, group = id)) + 
      geom_path() + 
      geom_point(aes(color = value), size = 3) + 
      scale_x_discrete(position = "top", limits = c("0", "1", "2", "3", "4")), 
  tooltip = c("x", "y", "group"), height = 600, width = 300),     
  datatable(sd1)
)  
sd2 <- SharedData$new(df_test2, key = ~id)

bscols(
  ggplotly(
    # ploting
    ggplot(sd2, aes(x = value, y = item, group = id)) + 
    geom_path() + 
    geom_point(aes(color = value), size = 3) + 
    scale_x_discrete(position = "top", limits = c("0", "1", "2", "3", "4")),     
  tooltip = c("x", "y", "group"), height = 600, width = 300),    
  datatable(sd2)
) 
这对于我想要的串扰功能的一个最小示例来说是可行的,但是我需要
DT::datatable
中的数据采用宽格式。如示例所示,点和路径(标记和轨迹)需要链接到
id
,这对于宽格式的每一行都应该是唯一的。此外,我希望找到一种解决方案,在用户单击所需的表格行之前,所有点和路径都将不可见。
我猜我在这方面走错了方向,可能需要做一些我没有想到的事情。我读到现在,在2021年,plotly API可以使用 格式化,但还没有找到在R中如何实现这一点的任何示例


非常感谢您的帮助。

也许您可以使用JS(请参阅和)转换数据表。