首页 文章

R:Dplyr 'group_by'似乎不起作用[重复]

提问于
浏览
1

这个问题在这里已有答案:

我刚刚开始尝试使用Shiny,我在使用dplyr 'group_by'函数时遇到了问题 .

我的一般想法是,我有一个数据集,其中包含许多数值变量和一个变量,通过这些变量可以对这些变量进行分组(在我的案例中为19个国家,因此变量范围为1到19) . 现在我想使用metafor包对每个国家的两个变量之间的相关性进行元分析 . 所以我想分别计算每个国家的两个选定变量之间的相关性,然后将它们放在一个荟萃分析中,最后显示这些效应的森林图 .

我使用mtcars数据集作为我已经走了多远的例子:

UI

library(shiny)
library(metafor)
library(dplyr)


ui <- fluidPage(
  sidebarPanel(

    selectInput("x", label = "Choose Variable I", 
    choices = c("Displacement (cu.in.)", "Horsepower", "Rear axle ratio",
    "Weight (1000lbs)", "1/4 mile time"), selected = "Displacement (cu.in.)"),

    selectInput("y", label = "Choose Variable II", 
    choices = c("Displacement (cu.in.)", "Horsepower", "Rear axle ratio",
    "Weight (1000lbs)", "1/4 mile time"), selected = "Horsepower")
  ),

  mainPanel(
    plotOutput(outputId = "plot")
    ) 
  )

SERVER

server <- function(input, output) {


  output$plot <-renderPlot({

    data_x <- switch(input$x, 
                     "Displacement (cu.in.)" = mtcars$disp,
                     "Horsepower" = mtcars$hp,
                     "Rear axle ratio" = mtcars$drat,
                     "Weight (1000lbs)" = mtcars$wt,
                     "1/4 mile time" = mtcars$qsec)

    data_y <- switch(input$y, 
                     "Displacement (cu.in.)" = mtcars$disp,
                     "Horsepower" = mtcars$hp,
                     "Rear axle ratio" = mtcars$drat,
                     "Weight (1000lbs)" = mtcars$wt,
                     "1/4 mile time" = mtcars$qsec)

    meta_main <- mtcars %>% 
      group_by(gear) %>% 
      summarise(participantID = n(), 
                correlation = cor(data_x, data_y, use = "complete.obs"))


    meta <- rma(ni=participantID, ri=correlation, 
                method="REML", measure="COR", data=meta_main)


    forest(meta) 

  })

}

shinyApp(ui = ui, server = server)

在示例中,我按“齿轮”(有3个级别)进行分组,并选择变量'Displacement','Horsepower','Rear shaft ratio','Weight'和'1/4英里时间' .

最终输出显示选择小部件以及森林图 . 但是,所有级别的“齿轮”的相关性都是相同的 . 因此,我怀疑'group_by'功能不能按预期工作 .

我曾尝试在网上建议使用'group_by_',但它没有太大变化 .

关于'group_by'如何与Shiny一起使用的任何想法?

1 回答

  • 1

    试试这个服务器功能,首先你应该加载 lazyeval 包 .

    server <- function(input, output) {
    
    output$plot <-renderPlot({
    
    data_x <- switch(input$x, 
                     "Displacement (cu.in.)" = "disp",
                     "Horsepower" = "hp",
                     "Rear axle ratio" = "drat",
                     "Weight (1000lbs)" = "wt",
                     "1/4 mile time" = "qsec")
    
    data_y <- switch(input$y, 
                     "Displacement (cu.in.)" = "disp",
                     "Horsepower" = "hp",
                     "Rear axle ratio" = "drat",
                     "Weight (1000lbs)" = "wt",
                     "1/4 mile time" = "qsec")
    
    meta_main <- mtcars %>% 
      group_by(gear) %>% 
      mutate(participantID = n()) %>%
      group_by(gear, participantID) %>% 
      summarise_(correlation = interp(~cor(x, y, use = "complete.obs"), x = as.name(data_x), y = as.name(data_y)))
    
    
    meta <- rma(ni=participantID, ri=correlation, 
                method="REML", measure="COR", data=meta_main)
    
    
    forest(meta) 
    
    })
    
    }
    

相关问题