我有一张data.table约250万行的表.有两列.我想删除两列中重复的任何行.以前对于data.frame,我会这样做:
data.table但这不适用于data.table.我试过df -> unique(df[,c('V1', 'V2')])但它似乎仍然只在data.table的键上操作而不是整行.
有什么建议?
干杯,戴维
例
>dt
V1 V2
[1,] A B
[2,] A C
[3,] A D
[4,] A B
[5,] B A
[6,] C D
[7,] C D
[8,] E F
[9,] G G
[10,] A B
Run Code Online (Sandbox Code Playgroud)
在上面的data.table中unique(df[,c(V1,V2), with=FALSE]),表键是哪里,只删除行4,7和10.
> dput(dt)
structure(list(V1 = c("B", "A", "A", "A", "A", "A", "C", "C",
"E", "G"), V2 = c("A", "B", "B", "B", "C", "D", "D", "D", "F",
"G")), .Names = c("V1", "V2"), …Run Code Online (Sandbox Code Playgroud) 编辑:正如@Symbolix指出的那样,setMaxBounds确实与我正在寻找的不同.我真的只想完全禁用缩放,并删除控件.传单JavaScript API文档中描述的zoomControl选项似乎是我想要的,但我在R包中找不到该选项.
我正在使用传单在R中构建一个地图工具,我想将缩放限制到某个区域,但该setMaxBounds功能似乎没有任何效果.
library(dplyr)
library(leaflet)
library(tigris)
ohio_map <- leaflet(counties('OH', cb = TRUE)) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(weight = .3,
color = "#229922",
layerId = ~NAME) %>%
setMaxBounds(lng1 = -84.800,
lat1 = 42.000,
lng2 = -80.500,
lat2 = 38.400)
ohio_map
Run Code Online (Sandbox Code Playgroud)
这将显示地图的右侧区域,但不会阻止缩小.
完全删除缩放控件会更好,这样我就可以用更适合手头应用程序的东西替换导航.我找到了一个zoomControl选项,但是无法弄清楚在R中放置它以使其工作.
我试图模块化一个复杂的Shiny应用程序,我conditionalPanel应该只在给定某个输入状态时出现.
在我将所有内容都模块化之前,输入和conditionalPanel都在ui.R,我可以使用以下内容引用输入:
conditionalPanel("input.select == 'Option one'", p('Option one is selected'))
Run Code Online (Sandbox Code Playgroud)
现在我已经模块化了,访问输入更加复杂.我认为以下是这样做的方法,但它并不是很有效.(这里我把东西组合成一个独立的脚本):
library(shiny)
## Module code for 'selectorUI' and 'selector'
selectorUI <- function(id) {
ns <- NS(id)
selectizeInput(inputId = ns('select'),
label = 'Make a choice:',
choices = c('Option one', 'Option two'))
}
selector <- function(input, output, session) {
reactive(input$select)
}
## Main app
ui <- shinyUI(fluidPage(
selectorUI('id1'),
conditionalPanel(condition = "output.selected == 'Option one'", p('Option one is selected.'))
))
server <- shinyServer(function(input, output, session) {
output$selected <- callModule(selector, …Run Code Online (Sandbox Code Playgroud) 我正在构建一个Shiny应用程序,其中包含一些动态生成的HTML,其中包含句子中的链接.不幸的是,如果我使用这些tags函数来执行此操作,则无论我是否需要,每个元素都有一个空格.
例如,如果我想写
这是我最喜欢的链接!
有人可能会认为你可以这样做
p('This is my ', a(href = 'https://stackoverflow.com/', 'favorite link ever'), '!')
Run Code Online (Sandbox Code Playgroud)
但这导致每个元素都在一个单独的行上,HTML规范意味着每个元素之间会有一个空格.
<p>
This is my
<a href="https://stackoverflow.com/">favorite link ever</a>
!
</p>
Run Code Online (Sandbox Code Playgroud)
看起来像这样(注意感叹号前面的空格)
这是我最喜欢的链接!
我是否必须使用HTML(paste0(...))构建我的HTML,或者是否有一些技术来使用tags我缺少的函数?
谢谢..
我正在用plot_ly散点图构建一个闪亮的应用程序.我正在使用一个SharedData对象(来自串扰包)在绘图和a datatable(来自DT)之间共享信息.
问题是当您单击绘图中的某个点时,它会使所有其他点的颜色变暗,并为所选点的图例添加一个条目,一旦发生这种情况,似乎没有办法撤消它.我想禁用这些视觉更改,但仍能检测到点击次数.
如果我只是在调用的数据参数中使用被动data.frame而不是SharedData对象plot_ly,但是event_data从图中没有足够的信息来选择行中的行,则不会发生此问题datatable.(点x和y点坐标是浮点数字,因此坐标与数据匹配可能会产生意外结果.)
这是一个演示使用mtcars:
library(shiny)
library(DT)
library(plotly)
library(data.table)
library(crosstalk)
### UI function ---------
ui <- fluidPage(
fluidRow(
plotlyOutput('my_graph', height = '400px')
),
fluidRow(
dataTableOutput('my_table')
)
)
### Server function -------
server <- function(input, output, session) {
### SharedData object ----
filtered_data <- reactive({
data.table(mtcars, keep.rownames = TRUE)
})
shared_data <- reactive({
req(filtered_data())
SharedData$new(filtered_data(), ~rn)
})
### my_graph ---- …Run Code Online (Sandbox Code Playgroud) 在列上创建datatablewith filter = 'top'并使用格式化功能时,格式不会应用于该列的过滤器控件.有没有办法格式化过滤器控件?
例如,如果我将浮点数设置为百分比格式,则过滤器中的滑块仍显示浮点数.
library(DT)
my_data <- mtcars
my_data$wt_pctile <- trunc(rank(my_data$wt)) / length(my_data$wt)
datatable(my_data,
filter = 'top') %>%
formatPercentage('wt_pctile')
Run Code Online (Sandbox Code Playgroud)
更新10/3/2018:这不是R独有的.它之前已被报道,目前被标记为功能请求,在这里:https://github.com/plotly/plotly.js/issues/260
我正在为r中的plotly图形添加散点图点的自定义悬停文本.它似乎是将文本左对齐,居中对齐或右对齐,具体取决于文本框是分别显示在绘图点的右侧,中间还是左侧.无论盒子的位置如何,我都希望文本始终对齐.我已经能够设置字体样式,例如设置颜色和大小,但无法更改文本对齐方式.
这是一个MRE.我删除了传说,所以最右边的点被迫让他们的悬停框出现在点的左边.
plot_ly(iris,
x = ~Sepal.Length,
y = ~Sepal.Width,
type = 'scatter',
mode = 'markers',
hoverinfo = 'text',
hoverlabel = list(font = list(color = 'white')),
text = ~paste0('Some rather long text',
'\nSepal.Length: ', Sepal.Length,
'\nSepal.Width: ', Sepal.Width)) %>%
layout(showlegend = FALSE)
Run Code Online (Sandbox Code Playgroud)
更新:在此处作为错误报告打开:https://github.com/ropensci/plotly/issues/1133
我正在创建一个散点图plot_ly,其中颜色由因子变量指示,大小由数字表示.看起来在这种情况下,尺寸受到颜色的奇怪影响.
为了演示,这里我将同一个变量分配给x和size.在这种情况下,人们会期望最大的点位于最右边.此演示代码包含一些额外hoverinfo的调试功能.
library(plotly)
my_data <- mtcars
my_data$carb <- as.factor(mtcars$carb)
plot_ly(my_data,
x = ~wt,
y = ~mpg,
size = ~wt,
color = ~carb,
type = 'scatter',
mode = 'markers',
hoverinfo = 'text',
text = ~paste0('wt (x): ', wt, '\n',
'mpg (y): ', mpg, '\n',
'wt (size): ', wt, '\n',
'carb (color): ', carb, '\n'))
Run Code Online (Sandbox Code Playgroud)
而不是右边的最大点,看起来好像是在每个颜色组内缩放尺寸,这根本不是我真正想要的:
我尝试从因素更改为字符,同样的事情发生,如果我更改为数字(使用因子级别映射到颜色),则图例变为连续,这是不好的.有任何想法吗?
我正在使用该sparkline包生成条形图,并将其放入datatableShiny 应用程序中的单元格中。我已经设法在独立中产生所需的输出datatable,但是当我将其放入 Shiny 应用程序中时,它不起作用。spk_add_deps()这可能与如何识别 htmlwidgets有关。我尝试过spk_add_deps()多次移动该函数并向其传递各种标识符,但没有任何效果。
我确实在这里发现了本质上相同的问题Render datatable with Sparklines in Shiny
但给定的解决方案 (1) 依赖于在回调函数中为迷你图编写 JavaScript 代码(违背了使用 R 函数的目的sparkline())和 (2) 似乎如果迷你图在查看器中呈现,那么我们离让它们在 Shiny 应用程序中呈现而无需编写所有 JavaScript 就不远了。
这是演示:
# Preliminary, load packages and build a demo table with the sparkline code merged in
library(shiny)
library(DT)
library(data.table)
library(sparkline)
## Create demo data sets
my_mtcars <- data.table(mtcars, keep.rownames = TRUE)
names(my_mtcars)[1] <- 'car_id'
set.seed(0)
data_for_sparklines <- data.table(car_id = rep(my_mtcars$car_id, 5),
category = …Run Code Online (Sandbox Code Playgroud) 我正在构建一个闪亮的应用程序,其中的selectInput功能既作为传统的 HTML 选择下拉列表又作为可点击的图像地图呈现。我当前的策略是将图像地图多边形链接回应用程序并添加 URL 参数,解析该 URL,然后更新选择。当然,这每次都会重置应用程序,这还可以,但不是很好,而且 UI 闪烁也不是很优雅。
我的问题是:
selectInput以便在解析 URL 之前不会显示它,以便在闪烁到参数化选择之前暂时不显示默认选择?这是一个演示:
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("letter_select",
"Pick a letter:",
choices = c('A' = 1, 'B' = 2, 'C' = 3, 'D' = 4))
),
mainPanel(
h3('Or click a letter'),
img(src = 'testpattern.png', usemap = '#image-map'),
HTML('
<map name="image-map">
<area target="_self" title="A" href="?letter=1" coords=0,0,50,0,50,50,0,50" shape="poly">
<area target="_self" title="B" href="?letter=2" coords=50,0,100,0,100,50,50,50" shape="poly">
<area target="_self" title="C" href="?letter=3" coords=0,50,50,50,50,100,0,100" shape="poly">
<area target="_self" title="D" href="?letter=4" coords=50,50,100,50,100,100,50,100" …Run Code Online (Sandbox Code Playgroud) r ×10
shiny ×6
dt ×3
plotly ×3
data.table ×1
datatables ×1
duplicates ×1
formatting ×1
hover ×1
html ×1
htmlwidgets ×1
hyperlink ×1
imagemap ×1
leaflet ×1
module ×1
r-plotly ×1
scatter-plot ×1
sparklines ×1