[英]shiny R: how to sort and remove duplicates in gvisTable dataframe in reactive setting
数据框未按顺序排序问题的第一部分是因为您正在格式化分数,因此这些分数将被存储为字符串(具体来说是因素)。 因此,这些分数已按因素水平进行了排序。 因此,为了避免这种情况,您需要做的是,每当定义一个数据帧时, stringsAsFactors = FALSE
使参数stringsAsFactors = FALSE
。 因此,在您的代码中,无论您在哪里定义数据帧,例如new_row<- data.frame(rank, team, score)
将其更改为new_row<- data.frame(rank, team, score, stringsAsFactors = FALSE)
获得重复项的第二个问题是因为df2是在全局环境中定义的,并且在不清除df2中先前值的情况下对其进行绑定。 要解决此问题,您需要清除df2中的所有先前行。 为此,可以使用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),]))
})
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.