使用 Shiny App 协助进行数据过滤

Assistance in data filtering using Shiny App

提问人:yusefsoliman 提问时间:9/10/2023 最后编辑:r2evansyusefsoliman 更新时间:9/11/2023 访问量:39

问:

我有一个表格,总结了 ~100 项临床试验。此表需要添加到闪亮的应用程序中,然后用户根据表中的不同变量(如端点、干预等)筛选表。

该表的问题在于,据我所知,每项研究都必须在一行中。但在 excel 中,每项研究都需要不止一行,因为像“干预”和“终点”这样的变量有很多级别,我需要根据这些变量对我的数据进行子集。

例如,用户选择包含结果 1 或干预 1 的研究的子集。许多研究混合了这些,如下面的屏幕截图所示。

这使得每项研究不可能放在一行中,特别是一项研究最多可以有 15 种不同的干预措施(有一长串干预措施,使用将基于这些干预措施的子集)

如何处理这个问题?

sample

r 闪亮 的 Tidyverse 数据过滤

评论

0赞 r2evans 9/11/2023
(1)看起来你很难处理这些数据,这意味着首先询问闪亮的积分还为时过早。首先解决基本的数据问题,然后尝试使其花哨/互动。(2) 请不要发布(仅)代码/数据/错误的图像:它会破坏屏幕阅读器,并且无法复制或搜索(参考:meta.stackoverflow.com/a/285557xkcd.com/2116)。请将代码、控制台输出或数据(例如,或输出)直接包含在代码块中。data.frame(...)dput(head(x))

答:

0赞 r2evans 9/11/2023 #1

听起来您需要弄清楚如何用前一行的数据“填充”所有空行。暂时忽略的组件,如果我有数据(在 xlsx 中,尽管 CSV 是否无关紧要),如下所示:

spreadsheet with sparse rows

我们可以读入并用 or 进行修复:zoo::na.locftidyr::fill

dat <- readxl::read_excel("~/Downloads/something.xlsx")
dat
# # A tibble: 6 × 5
#   Author    Year Methodology    `Intervention(s)` `Endpoint(s)`
#   <chr>    <dbl> <chr>          <chr>             <chr>        
# 1 X et al.  2022 Prospective    Intervention 1    Endpoint 1   
# 2 NA          NA NA             Intervention 2    Endpoint 2   
# 3 NA          NA NA             Intervention 3    Endpoint 3   
# 4 Y et al.  2021 Something else Intervention 4    Endpoint 4   
# 5 NA          NA NA             Intervention 5    Endpoint 5   
# 6 NA          NA NA             Intervention 6    Endpoint 6   

并使用以下方法之一进行修复:

tidyr::fill(dat, Author, Year, Methodology)
# # A tibble: 6 × 5
#   Author    Year Methodology    `Intervention(s)` `Endpoint(s)`
#   <chr>    <dbl> <chr>          <chr>             <chr>        
# 1 X et al.  2022 Prospective    Intervention 1    Endpoint 1   
# 2 X et al.  2022 Prospective    Intervention 2    Endpoint 2   
# 3 X et al.  2022 Prospective    Intervention 3    Endpoint 3   
# 4 Y et al.  2021 Something else Intervention 4    Endpoint 4   
# 5 Y et al.  2021 Something else Intervention 5    Endpoint 5   
# 6 Y et al.  2021 Something else Intervention 6    Endpoint 6   

dat[] <- lapply(dat, zoo::na.locf)
dat
# # A tibble: 6 × 5
#   Author    Year Methodology    `Intervention(s)` `Endpoint(s)`
#   <chr>    <dbl> <chr>          <chr>             <chr>        
# 1 X et al.  2022 Prospective    Intervention 1    Endpoint 1   
# 2 X et al.  2022 Prospective    Intervention 2    Endpoint 2   
# 3 X et al.  2022 Prospective    Intervention 3    Endpoint 3   
# 4 Y et al.  2021 Something else Intervention 4    Endpoint 4   
# 5 Y et al.  2021 Something else Intervention 5    Endpoint 5   
# 6 Y et al.  2021 Something else Intervention 6    Endpoint 6   

从这里,您可以根据需要进行过滤,而不会丢失有关作者/年份/等的信息。

评论

0赞 yusefsoliman 9/11/2023
这是一个很好的解决方案。但是,当我们在一个闪亮的应用程序中展示最终表格时,每项研究都会重复多次。例如,X等人,根据你的表格将出现三次。如何避免这种情况?
1赞 r2evans 9/11/2023
我认为您需要考虑“处理”数据和“为美学而渲染”的数据之间的区别。我认为后者就是你所说的渲染,也许可以用像 or 这样的包很好地处理。但是,快速破解可能是这样的(要“删除重复数据”的列在哪里)。gtDTdat[,1:3] <- lapply(dat[,1:3], function(z) ifelse(c(FALSE, z[-length(z)] == z[-1]), "", z))1:3
0赞 yusefsoliman 9/11/2023
你能给我举个例子来说明如何在 Shiny 中实现这一点吗?我尝试了此代码,但没有显示结果。非常感谢您的帮助。
0赞 r2evans 9/11/2023
这与.如果可以在控制台上执行此操作,则可以在 中执行此操作。如果你不知道如何把它放到应用程序的反应式组件中,那么我建议你逐步浏览闪亮的教程来了解反应性,比如 mastering-shiny.org/basic-reactivity.htmlshinyshinyshiny