我想在 data.table 中填充行 NA,使用 'locf',但要分别处理每一行。我似乎无法从以下结果中得到结果;
require(data.table)
set.seed(456)
# some dummy data
dt <- data.table(a = sample(1:4,6, replace=T), b = sample(1:4,6, replace=T), c = sample(1:4,6, replace=T),
d = sample(1:4,6, replace=T), e = sample(1:4,6, replace=T), f = sample(1:4,6, replace=T),
g = sample(1:4,6, replace=T), h = sample(1:4,6, replace=T), i = sample(1:4,6, replace=T),
j = sample(1:4,6, replace=T), xx = sample(1:4,6, replace=T))
dt[4, c:=NA]
dt[1, g:=NA]
dt[1, h:=NA]
# set colnames
cols <- setdiff(names(dt),"xx")
# use nafill over rows
dt[, (cols) := nafill(.SD, type="locf"), seq_len(nrow(dt)), …Run Code Online (Sandbox Code Playgroud) 我正在使用RasterVis和levelplot来制作一些栅格的格子图.我目前对大多数事情都很好,但是我想将每个面板的标题从文件名更改为选定的字符串(文件名是复杂且长,我只想使用一年,例如'2004').
查看levelplot页面,它会指示levelplot根据参数'useRaster'查找某些设置,要么转到panel.levelplot或panel.levelplot.raster,但我很难使用后面的这些函数.
任何帮助非常感谢,这里是一些示例代码;
require(rasterVis)
layers <- c(1:4)
s2 <- stack()
for (i in layers) {
r <- raster(nrows=100, ncols=100,ext)
r[] <- sample(seq(from = 1, to = 6, by = 1), size = 10000, replace = TRUE)
rasc <- ratify(r)
rat <- levels(rasc)[[1]]
rat$legend <- c("A","B","C","D","E","F")
levels(rasc) <- rat
s2 <- stack(s2, rasc)
}
levelplot(s2, col.regions=rev(terrain.colors(6)),main = "example")
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我希望"layer.1.1"为"2004",依此类推至2007年
我有一个由 7 个栅格组成的栅格堆栈,其数据范围差异很大,并且并非所有栅格都遵循完全相同的范围。(有些是低值范围,有些是高得多)。将 levelplot 函数与堆栈一起使用,它可以很好地绘制,例如:
r <- raster(ncol=10,nrow=10)
r[] <- sample(c(1:3),size=100,replace=T)
r1 <- raster(ncol=10,nrow=10)
r1[] <- sample(c(1:9),size=100,replace=T)
r2 <- raster(ncol=10,nrow=10)
r2[] <- sample(c(5:15),size=100,replace=T)
r3 <- raster(ncol=10,nrow=10)
r3[] <- sample(c(3:35),size=100,replace=T)
s <- stack(r,r1,r2,r3)
breaks <- 7
my.at <- round(seq(min(minValue(s)), max(maxValue(s)), length.out = breaks),digits=2)
myColorkey <- list(at=my.at,height=0.95, width=1, labels=list(at=my.at,cex=1.1))
cols <- (brewer.pal(length(my.at)-1, "YlGnBu"))
levelplot(s,at=my.at,col.regions=cols,colorkey = myColorkey)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,具有较低值数据的图像是一种颜色(实际上,在我的真实数据中,大多数图都是一种颜色,因为数据范围由后两个栅格主导)。使用 levelplot 函数,我想对整个栅格堆栈进行重新分类,用我定义的一些类梳理出较低值栅格中的一些模式,并简单地将任何超过值 x(可能是上面示例数据中的 10)的值分配为一种颜色。
批准和设置级别的常用方法不适用于堆栈,并且我尝试过的任何解决方法(使用矩阵和重新分类)都不会强制比栅格的类更多的级别
这是我的解决方法,使用标准图例,但如果可能的话我想使用ratify等;
# using s from above
m <- c(0,1,1, 1,3,2, 3,6,3, 6,10,4, 10,35,5)
mat <- matrix(m, ncol=3, byrow=TRUE)
src <- …Run Code Online (Sandbox Code Playgroud) 是否可以从tile图中的clicklet/shiny(在R中)中单击事件获取lat long?(即不是来自任何加载的标记,多边形等).只是为了显示我猜的位置(纬度/经度)信息.
我想也许从这个问题可能但没有运气.
ui <- bootstrapPage(
tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
leafletOutput("map", width = "100%", height = "100%")
)
server <- function(input, output,session) {
output$map <- renderLeaflet({
leaflet() %>%
addProviderTiles("CartoDB.Positron")%>%
setView(lng = -4, lat= 52.54, zoom = 7)
})
#Show popup on click
observeEvent(input$map_marker_click, {
click <- input$map_marker_click
text<-paste("Lattitude ", click$lat, "Longtitude ", click$lng)
proxy <- leafletProxy("map")
proxy %>% clearPopups() %>%
addPopups(click$lng, click$lat, text)
})
}
runApp(shinyApp(ui, server), launch.browser = TRUE)
Run Code Online (Sandbox Code Playgroud)
最终我想在Leaflet&Shiny中为栅格数据创建一个点击标记(使用返回的纬度/长度),但这将是一个良好的开端(他的qu似乎做了一些事情,但我根本无法再创建它).
我想在点击图表时播放 instagram 或 Youtube 视频(例如显示异常值等)
到目前为止,明确告诉 Shiny 视频是什么作品:
require(shiny)
require(ggplot2)
# data
df <- data.frame(ID=c(1,2),x=c(33,7),y=c(50,16),name=c("Vid1","Vid2"),link=c("https://www.youtube.com/embed/Gyrfsrd4zK0","https://anotherlink.com"), stringsAsFactors=FALSE)
# video is explicitly embedded with the youtube link (i.e. not dynamic)
ui <- basicPage(
plotOutput("plot", click = "plot_click"),
verbatimTextOutput("selection"),
conditionalPanel("plot_click!=null",
h4(textOutput("nametext")),
HTML('<iframe width="200" height="100" src="https://www.youtube.com/embed/Gyrfsrd4zK0" frameborder="0" allowfullscreen></iframe>'))
)
server <- function(input, output,session) {
output$plot <- renderPlot({
ggplot(data=df,aes(x=x,y=y))+
geom_point()+
scale_x_continuous(limits = c(0, 68))+
scale_y_continuous(limits = c(0, 52.5))
})
output$selection <- renderPrint({
nearPoints(df, input$plot_click)
})
info <- reactive({
t <- as.data.frame(nearPoints(df, input$plot_click))
s <- t[1,4] …Run Code Online (Sandbox Code Playgroud) 我一直在研究Leaflet/Shiny中addDrawToolbar的不错的附加功能,它允许自定义绘制形状等。
但是我对通过访问绘制形状的几何形状来设置空间数据的子集感兴趣,这是如何完成的?这里和这里有一些努力,但无论如何我都无法让它们发挥作用。
我想也许情节画笔的巧妙功能可能适用于传单地图,但 Joe Cheng去年建议它没有到位。
那么,是否有任何进展或解决方法?或者是否有人设法使用 addDrawToolbar 访问绘制矩形的几何形状?
[R-3.4.3 64 位、RStudio、shinydashboard_0.6.1、shiny_1.0.5、leaflet.extras_0.2、Chrome]
我正在使用 Shiny 制作在 R/Leaflet 中使用的图标,我得到的所有内容如下,但我不知道为什么:
这是使用这里的玩具示例:
oceanIcons <- iconList(
ship = makeIcon("ferry-18.png", "ferry-18@2x.png", 18, 18),
pirate = makeIcon("danger-24.png", "danger-24@2x.png", 24, 24)
)
# Some fake data
df <- sp::SpatialPointsDataFrame(
cbind(
(runif(20) - .5) * 10 - 90.620130, # lng
(runif(20) - .5) * 3.8 + 25.638077 # lat
),
data.frame(type = factor(
ifelse(runif(20) > 0.75, "pirate", "ship"),
c("ship", "pirate")
))
)
leaflet(df) %>% addTiles() %>%
# Select from oceanIcons based on df$type
addMarkers(icon = ~oceanIcons[type]) …Run Code Online (Sandbox Code Playgroud) 我想使用条件面板在绝对面板中创建一个图,该图仅在我在底图上单击鼠标时出现。这没有问题,我已经做到了。
但是我希望一旦用户划掉该点弹出窗口,该情节就会清除,并且 conditionalPanel 再次折叠。目前,当执行另一次单击时,绘图会更改并重新绘制数据,但我希望将弹出窗口的清除与条件面板的折叠相关联;
这个非常简单的例子显示了点击时创建条件面板(完整版本创建一个点并读取光栅堆栈以绘制时间线):
ui <- bootstrapPage(
tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
leafletOutput("map", width="100%", height="100%"),
absolutePanel(class = "panel panel-default", fixed = TRUE,draggable = TRUE,
top = 20, left = 60,
conditionalPanel("input.map_click",
h4(textOutput("Click_text")),
top=20, left=60, height=400, width=200,
style="padding-left: 10px; padding-right: 8px; padding-top: 8px; padding-bottom: 8px")
)
)
server <- function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
setView(-4,52.5,9) %>%
addProviderTiles(providers$CartoDB.Positron)
})
observeEvent(input$map_click, {
click <- input$map_click
text<-paste("Lattitude ", click$lat, "Longtitude ", click$lng)
text2 <- paste("YOUVE CLICKED THE MAP!!!",click$lat, …Run Code Online (Sandbox Code Playgroud)