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