提问人:yusefsoliman 提问时间:9/10/2023 最后编辑:r2evansyusefsoliman 更新时间:9/11/2023 访问量:39
使用 Shiny App 协助进行数据过滤
Assistance in data filtering using Shiny App
问:
我有一个表格,总结了 ~100 项临床试验。此表需要添加到闪亮的应用程序中,然后用户根据表中的不同变量(如端点、干预等)筛选表。
该表的问题在于,据我所知,每项研究都必须在一行中。但在 excel 中,每项研究都需要不止一行,因为像“干预”和“终点”这样的变量有很多级别,我需要根据这些变量对我的数据进行子集。
例如,用户选择包含结果 1 或干预 1 的研究的子集。许多研究混合了这些,如下面的屏幕截图所示。
这使得每项研究不可能放在一行中,特别是一项研究最多可以有 15 种不同的干预措施(有一长串干预措施,使用将基于这些干预措施的子集)
如何处理这个问题?
答:
0赞
r2evans
9/11/2023
#1
听起来您需要弄清楚如何用前一行的数据“填充”所有空行。暂时忽略闪亮的组件,如果我有数据(在 xlsx 中,尽管 CSV 是否无关紧要),如下所示:
我们可以读入并用 or 进行修复:zoo::na.locf
tidyr::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 这样的包很好地处理。但是,快速破解可能是这样的(要“删除重复数据”的列在哪里)。gt
DT
dat[,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.html。shiny
shiny
shiny
评论
data.frame(...)
dput(head(x))