小编Shr*_*ree的帖子

tidyverse:按组进行逐行计算

我正在尝试在R中进行库存计算,这需要对每个Mat-Plant组合进行行计算.这是一个测试数据集 -

df <- structure(list(Mat = c("A", "A", "A", "A", "A", "A", "B", "B"
), Plant = c("P1", "P1", "P1", "P2", "P2", "P2", "P1", "P1"), 
    Day = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L), UU = c(0L, 10L, 
    0L, 0L, 0L, 120L, 10L, 0L), CumDailyFcst = c(11L, 22L, 33L, 
    0L, 5L, 10L, 20L, 50L)), .Names = c("Mat", "Plant", "Day", 
"UU", "CumDailyFcst"), class = "data.frame", row.names = c(NA, 
-8L))

  Mat Plant Day  UU CumDailyFcst
1   A    P1   1   0           11 …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse

7
推荐指数
1
解决办法
249
查看次数

R Shiny Datatable:再次单击已选定的行时防止取消选择该行

R(版本 3.4.1) 我正在使用闪亮(版本 1.0.5)的 DT(版本 0.4)包,并且需要当用户再次单击它时,我想防止取消选择已选择的行。例如,在下图中,如果用户再次单击第 3 行,则不应取消选择它。但是,如果用户选择一个新行,则该新行将被选中,而较早的行将被取消选择。

我想我需要的是数据表完全忽略已选择的行上的点击事件。

如果用户再次单击第 3 行,则不应取消选择该行,但如果他单击新行,则应在取消选择旧行的同时选择该新行

我尝试使用shinyjs::onclick如下所示的方法,但并不理想,因为它似乎“取消选择并重新选择”所选行(蓝色突出显示消失并再次单击时重新出现)而不是阻止取消选择

library(shiny)
library(DT)
library(shinyjs)

shinyApp(
  ui <- shinyUI(
    fluidPage(
      shinyjs::useShinyjs(),
      DTOutput("test")
    )
  ),  
  server <- shinyServer(function(input, output, session) {

    output$test <- renderDT({
      datatable(head(iris), selection = 'single')
    })    
    shinyjs::onclick("test",
               selectRows(dataTableProxy("test"), selected = input$test_rows_selected)
             )    
  })
)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种简单的方法可以做到这一点。谢谢!

javascript r datatables shiny dt

5
推荐指数
1
解决办法
1183
查看次数

DT 和 Shiny:使用过滤器格式化数据表中的数字

我有一个带有数据表的闪亮应用程序,我想完成两件事:

  1. 我想在 DTOutput 顶部添加过滤器
  2. 我希望将表中的数字格式化为百分比。

我只能实现其中之一。因此,如果我只使用过滤器(请参阅代码中的尝试#3),它可以工作,但我无法将数字格式化为百分比。如果我尝试格式化数字(请参阅代码中的 attpemts #1 和 #2),则过滤器消失,但数字格式正确。我还在控制台中收到警告消息:

“当 expr 生成数据表对象时,renderDataTable 会忽略...参数”

这对我没有多大帮助,因为我对 Shiny 和 R 还很陌生。

我找到了教程并回答了有关格式化数字或过滤表格的问题,但我显然遗漏了一些东西......如果您能指导我找到答案或发现下面代码中的错误,我将不胜感激。

可在此处重现app.R

library(shiny)
library(dplyr)
library(DT)

# Define UI 
ui <- fluidPage(
  actionButton("start", "Click to Start") 
  DTOutput('tbl1'),
  DTOutput('tbl2'),
  DTOutput('tbl3')
)

# Define Server
server = function(input, output) {

  #Attempt #1: gives me the formatted numbers but no filter.
  x <- eventReactive(input$start, iris %>% dplyr::filter(Species == "setosa") %>% datatable %>% formatPercentage(2:3, digits=2))
  output$tbl1<-  DT::renderDT(x(), filter="top")


  #Attempt #2: gives me the formatted …
Run Code Online (Sandbox Code Playgroud)

r shiny dt

5
推荐指数
1
解决办法
3527
查看次数

如何单击传单地图,创建标记,然后在单击 R 中的其他位置时删除该标记

我创建了一个闪亮的应用程序,用于显示数据框中点的传单地图。

我想允许用户单击地图上的任意位置以获取附近点的一些信息并在该点上留下标记。

他们可能想点击其他地方。当他们单击其他地方时,我希望留下一个新标记,并删除旧标记。

我已经编写了一个工作闪亮的应用程序,但我无法让它工作。

  1. 我尝试使用clearMarkers,但这会删除所有标记,包括我创建的标记和底层数据帧中的标记。

  2. 我尝试指定单击点的 id,以便clearMarkers 可能只是删除该点,但我不知道由谁来找出单击点的 id。

我怎样才能让它发挥作用?

这是我的玩具代码:

library(shiny)
library(sp)
library(shinydashboard)
library(leaflet)

#### Make a spatial data frame 
lats<-c(37.38,39)
lons<-c(-94,-95,-96)
df<-data.frame(cbind(lons,lats))
coordinates(df)<-~lons+lats

#### Define UI for application that draws a histogram
ui <- dashboardPage(

    dashboardHeader(
    ),

    # Sidebar layout with input and output definitions 
    dashboardSidebar(
    ),

    # Main panel for displaying outputs 
    dashboardBody(
                     h2("My Map", align="center"),
                     h5("Click anywhere to draw a circle", align="center"),
                     leafletOutput("mymap", width="100%", height="500px")
        ),
    )



#### Define server logic required to draw a histogram …
Run Code Online (Sandbox Code Playgroud)

r shiny r-leaflet

3
推荐指数
1
解决办法
1318
查看次数

ID累计滞后

我想通过ID创建一个累加的总和。但是,它不应将属于正在计算的行的值相加。

我已经尝试过cumsum。但是,我不知道如何添加一条语句,该语句指定不添加进行求和的行的数量。我要查找的结果列是名为“ sum”的第三列。

例如,对于ID 1,第一行是sum = 0,因为不应添加该行。但是,对于ID 1和第2行,sum = 100,因为第2行之前的ID 1的数量为100,依此类推。

   id amount sum
1:  1    100   0
2:  1     20 100
3:  1    150 120
4:  2     60   0
5:  2    100  60
6:  1     30 270
7:  2     40 160 
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

  df[,sum:=cumsum(amount),
      by ="id"] 

  data: df <- data.table(id = c(1, 1, 1, 2, 2,1,2), amount = c(100, 20, 
  150,60,100,30,40),sum=c(0,100,120,0,60,270,160) ,stringsAsFactors = 
  FALSE)
Run Code Online (Sandbox Code Playgroud)

datatable r multiple-conditions cumulative-sum

3
推荐指数
1
解决办法
108
查看次数

动态确定数据框列是否存在,如果存在则进行变异

我有根据客户端名称从数据库中提取和处理数据的代码。某些客户端可能拥有不包含特定列名称的数据,例如,last_namefirst_name。对于不使用last_nameor 的客户first_name,我不在乎。对于确实使用这些字段中的任何一个的客户,我需要使用mutate()这些列,toupper()以便我可以稍后在 ETL 过程中加入这些标准化字段。

现在,我正在使用一系列if()语句和一些辅助函数来查看数据帧的名称,然后在它们存在时进行变异。我使用if()语句是因为ifelse()主要是矢量化的并且不能很好地处理数据帧。

library(dplyr)
set.seed(256)

b <- data.frame(id = sample(1:100, 5, FALSE), 
                col_name = sample(1000:9999, 5, FALSE), 
                another_col = sample(1000:9999, 5, FALSE))

d <- data.frame(id = sample(1:100, 5, FALSE), 
                col_name = sample(1000:9999, 5, FALSE), 
                last_name = sample(letters, 5, FALSE))

mutate_first_last <- function(df){

  mutate_first_name <- function(df){
    df %>%
      mutate(first_name = first_name %>% toupper())
  }

  mutate_last_name <- function(df){
    df …
Run Code Online (Sandbox Code Playgroud)

r dplyr

2
推荐指数
1
解决办法
1631
查看次数

如何在dplyr中进行跨行计算?

有一个包含嵌套信息的数据框.让我们说出每所学校的学生人数,A班学生人数和B班学生人数.因此,学生= n.pupilsA + n.pupilsB + other_pupils

a <- data.frame(
  city = c(rep('New York',3), rep('Washington',3)),
  n = c(5, 2, 1, 5, 2, 1),
  name = c(
    'pupils',
    'classA',
    'classB',
    'pupils',
    'classA',
    'classB'
  )
)
Run Code Online (Sandbox Code Playgroud)

输出:

        city n   name
1   New York 5 pupils
2   New York 2 classA
3   New York 1 classB
4 Washington 5 pupils
5 Washington 2 classA
6 Washington 1 classB
Run Code Online (Sandbox Code Playgroud)

是否有一种聪明的方法(使用dplyr,大概是)进行小组操作,这将增加每个组"其他",这将是"学生"和"学生 - A级"+"学生 - B级"之间的差异.所以结果会是这样的:

        city   type npupils
1   New York classA       2
2   New York …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyr

1
推荐指数
1
解决办法
45
查看次数

合并一些行的新数据集

这不是关于长而宽的形状的问题!不要让它重复plz

假设我有:

 HouseholdID.  PersonID.   time.     dur.    age
      1            1         3        4       19
      1            2         3        4       29
      1            3         5        5       30
      1            1         5        5       18
      2            1         21       30      18
      2            2         21       30      30
Run Code Online (Sandbox Code Playgroud)

在每个家庭中,有些人有相同的时间和时间。只想合并具有相同HouseholdID,time和dur的行

输出:

   HouseholdID.  PersonID.   time.   dur.   age.  HouseholdID.  PersonID.  time.    dur.    age
       1            1         3        4      19     1            2         3        4       29
       1            3         5        5      30     1            1         5        5       18
       2            1         21       30     18     2            2         21       30      30
Run Code Online (Sandbox Code Playgroud)

r dataframe

1
推荐指数
1
解决办法
54
查看次数

有条件地将值分配给向量的随机子集

我想为满足某些条件的向量子集的随机样本分配一个定义的值(比方说1)。我似乎无法使其工作。

我已经试过这段代码:

a <- c(1:50)
df <- as.data.frame(a)
df$c <- 0 
df$c[sample(x=(df$c[df$a>25]), size = round(NROW(df$c[df$a>25])/5), replace = F)] <- 1
Run Code Online (Sandbox Code Playgroud)

我只想随机地将某些df$c向量值设为1,恰好是df$c其中df$aa的值大于25的五分之一值的随机样本(将5个观测值切换为1)。

但是到目前为止,它们都保持为0:/

谢谢!

r

0
推荐指数
1
解决办法
61
查看次数

R中的ave()函数和mean()函数有什么区别?

ave()mean()功能之间有什么区别R

例如,我试图找出R中数据框特定列的平均值?

我遇到了以下两个功能:

mean(dataset$age, na.rm= TRUE)
ave(dataset$age, FUN=function(x)mean(x, na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

第一个函数显然给了我平均值作为单个值。而第二个函数也给了我平均值,但是元素的个数与数据帧各行中的非缺失值一样多。为什么会这样呢?ave()当mean整齐地赋予ave时,函数的用途是什么?

r

0
推荐指数
1
解决办法
73
查看次数