所以我有两个数据框...一个是宽格式,其中列名称是日期,日期下列出的是那些日期发生的所有问题。第二个数据框是一个包含各种列的数据框,描述当天发生的事情的其他信息..像这样:
df_1 <- 2017-07-15 2017-08-15 2017-09-15 2017-10-15
'crashed' 'crashed' 'reset' 'crashed'
'damaged' 'reset' 'reset' 'reset'
'no problems' 'crashed' 'crashed' 'reset'
df_2 <- Date Make Model Color
2017-07-15 iPhone 7 black
2017-08-15 Android Galaxy silver
2017-09-15 iPhone 6 white
2017-10-15 Blackberry Curve black
我想访问df_1列中的所有数据,其名称与df_2的日期匹配...原因是因为我正在尝试将df_2中的信息用于ggplot geom_point()
并显示当光标悬停在同一日期的某个点上时,工具提示中来自df_1的信息
(以下代码来自此处,只需输入我的数据帧): https://gitlab.com/snippets/16220
library("shiny")
library("ggplot2")
ui <- pageWithSidebar(
headerPanel("Tooltips in ggplot2 + shiny"),
sidebarPanel(
HTML("Tooltips are managed by combination of shiny+ggplot hover functionality",
"and css styles. By setting hover argument of 'plotOutput' we could access",
"hover data from the server side, as an ordinary input. Hover input is",
"a list with: position of cursor ON the image; domain - that is",
"values of variables at the plotting area edges; range - that is position",
"of plotting area edges in pixels relative to whole image element.",
"Additionally for ggplot used mappings are returned. </br>",
"To create tooltip first we need to identify position of the cursor",
"inside the image element. We do it by calculating distances from left and",
"top edge of image element from hover data. Then we create tooltip, in this",
"app it is 'wellPanel' with some info inside, and set 'position' property",
"to 'absolute' and set 'left' and 'top' properties to calculated values.",
"However, 'absolute' position is defined as relative to the nearest positioned",
"ancestor. Because we want to position tooltip inside the image, we need",
"to put both 'plotOutput' with image and 'uiOutput' with tooltip content",
"inside additional 'div' element with 'position' property set to 'relative'.",
"We don't set top, left etc. for this element, so the actual position of",
"the image doesn't change - it's edges are identical as previously, so",
"we can use 'div' (for positioning tooltip) as substitute for image. </br>"),
width = 3
),
mainPanel(
# this is an extra div used ONLY to create positioned ancestor for tooltip
# we don't change its position
div(
style = "position:relative",
plotOutput("scatterplot",
hover = hoverOpts("plot_hover", delay = 100, delayType = "debounce")),
uiOutput("hover_info")
),
width = 7
)
)
server <- function(input, output) {
output$scatterplot <- renderPlot({
ggplot(df_2, aes(x = Date, y = make)) +
geom_point()
})
output$hover_info <- renderUI({
hover <- input$plot_hover
point <- nearPoints(df_2, hover, threshold = 5, maxpoints = 1, addDist = TRUE)
if (nrow(point) == 0) return(NULL)
# calculate point position INSIDE the image as percent of total dimensions
# from left (horizontal) and from top (vertical)
left_pct <- (hover$x - hover$domain$left) / (hover$domain$right - hover$domain$left)
top_pct <- (hover$domain$top - hover$y) / (hover$domain$top - hover$domain$bottom)
# calculate distance from left and bottom side of the picture in pixels
left_px <- hover$range$left + left_pct * (hover$range$right - hover$range$left)
top_px <- hover$range$top + top_pct * (hover$range$bottom - hover$range$top)
# create style property fot tooltip
# background color is set so tooltip is a bit transparent
# z-index is set so we are sure are tooltip will be on top
style <- paste0("position:absolute; z-index:100; background-color: rgba(245, 245, 245, 0.85); ",
"left:", left_px + 2, "px; top:", top_px + 2, "px;")
# actual tooltip created as wellPanel
wellPanel(
style = style,
p(HTML(paste0(DF_1 DATE THAT MATCHES DF_2 DATE)))
)
})
}
runApp(list(ui = ui, server = server))
答案 0 :(得分:1)
这适合你吗?
数据强>
df_1 <- read.table(text="2017-07-15 2017-08-15 2017-09-15 2017-10-15
'crashed' 'crashed' 'reset' 'crashed'
'damaged' 'reset' 'reset' 'reset'
'no problems' 'crashed' 'crashed' 'reset'",header=TRUE,stringsAsFactors = FALSE)
df_2 <- read.table(text="Date Make Model Color
2017-07-15 iPhone 7 black
2017-08-15 Android Galaxy silver
2017-09-15 iPhone 6 white
2017-10-15 Blackberry Curve black",header=TRUE,stringsAsFactors = FALSE)
<强>码强>
library(dplyr)
library(tidyr)
df_1 %>%
mutate(variable = letters[1:n()]) %>%
gather(Date, val, 1:4) %>%
mutate(Date = gsub("\\.","-",substr(Date,2,nchar(Date)))) %>% # you may not have to do this with your actual data
rbind(df_2 %>% gather(variable,val,-1)) %>%
spread(Date,val)
<强>结果强>
# variable 2017-07-15 2017-08-15 2017-09-15 2017-10-15
# 1 a crashed crashed reset crashed
# 2 b damaged reset reset reset
# 3 c no problems crashed crashed reset
# 4 Color black silver white black
# 5 Make iPhone Android iPhone Blackberry
# 6 Model 7 Galaxy 6 Curve
答案 1 :(得分:0)
好的,所以这是我的解决方法,虽然可能不是最好的?似乎是我唯一能做的就是得到我想要的东西。感谢你为MOODY_MUDSKIPPER做好准备!!
df_1 %>%
mutate(variable = letters[1:n()])
df_1 <- melt(df_1, id.vars='variable')
colnames(df_1)[2] <- "Date" #because the newly created variable column and the column with the dates were both named 'variable'...
df_1 <- dcast(df_1, Date ~ variable)
df_2 <- cbind(df_2,df_1,[,-1]) #subsetting to remove the first column from df_1 so that there arent two columns with Dates in them
现在df_2将包含来自df_1的所有信息