【问题标题】:shiny R: how to sort and remove duplicates in gvisTable dataframe in reactive setting闪亮的R:如何在反应设置中对gvisTable数据框中的重复项进行排序和删除
【发布时间】:2017-03-09 06:40:27
【问题描述】:

我正在构建一个闪亮的应用程序,它显示按分数排序的数据框。但是,我创建的数据框有重复,并且没有按分数列排序。当我第一次移动到显示数据框的选项卡时,它的排序很好。当我移动到另一个选项卡时,它会弄乱顺序,我将新行绑定到 values$df,然后返回显示数据框的选项卡。

【问题讨论】:

  • 你能提供一个可重现的例子吗?您提供的代码似乎有问题。
  • @SBista 我已经编辑了我的问题并粘贴了我在 app.R 文件中的内容。非常感谢您提前提供的帮助:)
  • @SBista fyi 第四个标签“참가신청서”是我获取用户信息的地方,第二个标签“분석”是显示 gvisTable 的地方。
  • @SBista 另外,如果您对如何使“참가신청서”标签成为可登录页面有任何想法,我将不胜感激!
  • 您只想让一个选项卡成为可登录页面,还是希望整个应用程序都可登录?

标签: r for-loop dataframe shiny


【解决方案1】:

数据框没有按顺序排序的问题的第一部分是因为您正在格式化您的分数,因此这些被存储为字符串(具体来说是因素)。所以这些分数是按因素的水平排序的。因此,为避免这种情况,您需要做的是,每当您定义数据框时,都要设置参数stringsAsFactors = FALSE。因此,在您定义数据框的任何地方的代码中,例如 new_row<- data.frame(rank, team, score) 将其更改为 new_row<- data.frame(rank, team, score, stringsAsFactors = FALSE)

您获得重复项的第二个问题是因为您的 df2 是在全局环境中定义的,并且您在没有清除 df2 中以前的值的情况下 rbinding 它。要解决这个问题,您需要清除 df2.xml 中的所有先前行。这样做的一种方式是df2<<-df2[0,]。所以我在你的代码中添加了如下所示,这似乎解决了你的问题。

 df2<- data.frame()
    output$summa2 <- renderGvis({
      #Clear the previous row in df2
      df2 <<- df2[0,]
      for (team_name in unique(values$df$team)){
        rank <- 0
        team <- team_name
        score <- format(mean(values$df[values$df$team==team_name,]$score), digits=4)

        new_row<- data.frame(rank, team, score, stringsAsFactors = FALSE)

        df2 <<- rbind(df2, new_row)
        df2 <<- df2[order(as.numeric(df2$score),decreasing=FALSE),]
        df2$rank <<- 1:nrow(df2)
      }

      return(gvisTable(df2[order(df2$score, decreasing=FALSE),]))
    })

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2019-12-05
    • 1970-01-01
    • 2013-12-22
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多