相关疑难解决方法(0)

使用字符串向量输入在dplyr中按多列分组

我试图将我对plyr的理解转移到dplyr,但我无法弄清楚如何按多列分组.

# make data with weird column names that can't be hard coded
data = data.frame(
  asihckhdoydkhxiydfgfTgdsx = sample(LETTERS[1:3], 100, replace=TRUE),
  a30mvxigxkghc5cdsvxvyv0ja = sample(LETTERS[1:3], 100, replace=TRUE),
  value = rnorm(100)
)

# get the columns we want to average within
columns = names(data)[-3]

# plyr - works
ddply(data, columns, summarize, value=mean(value))

# dplyr - raises error
data %.%
  group_by(columns) %.%
  summarise(Value = mean(value))
#> Error in eval(expr, envir, enclos) : index out of bounds
Run Code Online (Sandbox Code Playgroud)

将plyr示例翻译成dplyr-esque语法我错过了什么?

编辑2017:Dplyr已更新,因此可以使用更简单的解决方案.查看当前选择的答案.

r r-faq dplyr

145
推荐指数
7
解决办法
8万
查看次数

dplyr中的标准评估:summarise_作为字符串给出的变量

我想在一个内部引用一个未知的列名summarise.dplyr 0.3允许使用变量引用列名称中引入的标准评估函数,但是当您base在例如a中调用R函数时,这似乎不起作用summarise.

library(dplyr)

key <- "v3"
val <- "v2"
drp <- "v1"

df <- data_frame(v1 = 1:5, v2 = 6:10, v3 = c(rep("A", 3), rep("B", 2)))
Run Code Online (Sandbox Code Playgroud)

df看起来像这样:

> df
Source: local data frame [5 x 3]

  v1 v2 v3
1  1  6  A
2  2  7  A
3  3  8  A
4  4  9  B
5  5 10  B
Run Code Online (Sandbox Code Playgroud)

我想放弃v1,按v3分组,并为每个组加上v2:

df %>% select(-matches(drp)) %>% group_by_(key) %>% summarise_(sum(val, na.rm = TRUE))

Error in …
Run Code Online (Sandbox Code Playgroud)

r dplyr

48
推荐指数
5
解决办法
2万
查看次数

将用户规范作为参数传递给Shiny中的dplyr

我正在编写一个新的Shiny应用程序,我想通过使用dplyr命令进行数据操作来保持在Hadleyverse中.我希望Shiny打印一个表格,根据用户可以选择的变量仅显示前3个观察结果.例如,一个用户可能希望在收到的奖励数量方面看到前三名员工,而另一个用户希望在获得的奖励积分数量方面看到前三名.

在我最近的尝试中,我有这个为ui.R:

library(shiny)
shinyUI(fluidPage(
verticalLayout(
tableOutput("tbl"),
selectInput("top3", label = h4("Quantity"), 
  choices = list("Number of awards" = "NumberOfAwards", 
  "Total points awarded" = "TotalAwarded")), 
tableOutput("t3")
)))
Run Code Online (Sandbox Code Playgroud)

这对于s​​erver.R:

library(dplyr)
library(shiny)
shinyServer(function(input, output) {
employeestats <- read.table(header=TRUE, text='
Employee  NumberOfAwards TotalAwarded
Al        3              10
Betty     6              20
Chuck     2              5
Donna     4              15
Ed        0              0
')  
output$tbl <- renderTable({ 
employeestats
},include.rownames=TRUE) 
datasetInput <- reactive({employeestats})
output$t3 <- renderTable({ 
head(datasetInput() %>% arrange(desc(input$top3)),n=3)  
},include.rownames=TRUE)
})
Run Code Online (Sandbox Code Playgroud)

在Shiny之外,命令

head(employeestats %>% arrange(desc(NumberOfAwards)),n=3)
Run Code Online (Sandbox Code Playgroud)

给出前三名获奖者的答案.在Shiny中,完整的表和选择框打印时没有Top 3表,我收到消息"eval中的错误(替换(expr),envir,enclos):不能安排类'NULL'的列".我知道这与使用非标准函数的Shiny和dplyr有关,如果R看到NumberOfAwards或字符串"NumberOfAwards",它可能会有所不同.我尝试过像deparse(substitute())这样的东西,使用数字来表示要排列的列等,但没有成功.这不必详细说明; 例如,我不关心第三名的关系.

有任何想法吗?谢谢您的帮助.

r shiny dplyr

7
推荐指数
2
解决办法
4440
查看次数

闪亮应用程序中的多个group_by

我有一个闪亮的应用程序,它需要一个数据帧,并group_bydplyr. 我可以让它接受单个组,但我希望它selectInput接受多个分组变量。

selectInput我可以通过添加另一个,然后将其传递给语句来解决这个问题group_by,但我希望它扩展到任意数量的变量。因此我需要单个参数selectInput来接受多个参数。

仅添加multiple = TRUE不会以可以理解的方式传递变量group_by,并且我现在无法适应这个答案group_by_,该答案已被弃用

笔记,

此应用程序的完整版本使用fileInput,而不是硬编码数据集,因此调用renderUI、 和reactive

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

ui <- fluidPage(

  titlePanel("app"),

  sidebarLayout(
    sidebarPanel(

      uiOutput("groups")

    ),


    mainPanel(

      DT::dataTableOutput("summary")
    )
  )
)


server <- function(input, output) {
  mydata <- reactive({structure(list(School = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
                                                          2L, 1L, 1L, 2L, 2L), .Label = c("School1", "School2"), class = "factor"), 
                                     Town = structure(c(1L, 1L, …
Run Code Online (Sandbox Code Playgroud)

r shiny dplyr

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

group_by dplyr函数闪亮

使用Shiny时,我无法在dplyr工作中获得group_by.似乎dplyr无法将Shiny的输入$ var识别为表中的有效字段.

在这个例子中,我希望ui.R中的"level"输入决定分组的内容.

在ui.RI有:

library(shiny)
shinyUI(fluidPage(
titlePanel("Orders"),
sidebarLayout(
sidebarPanel(
  selectInput("Region_Input", label = h5("Choose a Region"), 
              choices = list("A", "B")),
  radioButtons("level", "What level do you want to see:",
                     list("item", "category"))

),
mainPanel(
  verbatimTextOutput("Level_Select"),
  tableOutput(outputId="table")

))))
Run Code Online (Sandbox Code Playgroud)

在server.RI中有:

library(shiny)  
library(dplyr)

OrderItems <- data.frame(Region =      c('A','A','A','A','A','A','B','B','B','B','B','B','B'),
                     item = c('Item A','Item B','Item C','Item D','Item E',
                              'Item A','Item B','Item C','Item D','Item E',
                              'Item A','Item B','Item C'),
                     category = c('Cat 1','Cat 1','Cat 1','Cat 2','Cat 2',
                                  'Cat 1','Cat 1','Cat 1','Cat 2','Cat 2',
                                  'Cat 1','Cat 1','Cat 1'))
shinyServer(
function(input, …
Run Code Online (Sandbox Code Playgroud)

r shiny dplyr

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

标签 统计

dplyr ×5

r ×5

shiny ×3

r-faq ×1