bro*_*ues 6 r data-manipulation dplyr
这可能看起来像一个奇怪的问题,但有没有办法将值传递给filter()基本上什么也没做?
data(cars)
library(dplyr)
cars %>% filter(speed==`magic_value_that_returns_cars?`)
Run Code Online (Sandbox Code Playgroud)
而且你会得到整个数据框cars
.我认为这在闪亮的应用程序中很有用,用户只需要选择他想要过滤的值; 例如,用户可以选择"欧洲","非洲"或"美国",并在幕后对数据框进行过滤,然后返回具有"欧洲"描述性统计数据的表格(如果用户选择"欧洲") .但是如果用户想要在没有首先过滤的情况下拥有描述性统计数据呢?是否有一个值可以传递过滤到"取消"过滤器并将整个数据帧传递给summary()?
列总是等于它自己,所以
cars %>% filter(speed == speed)
Run Code Online (Sandbox Code Playgroud)
将返回完整的数据集.
更新:当NA
数据中存在值时,结果将不起作用.对不起,我错过了.所以,为了使这个答案正确,我会敦促你从评论中继续推荐@konvas.
cars %>% filter(TRUE)
Run Code Online (Sandbox Code Playgroud)
当然还有其他方法,但我认为这是最好的.
小智 5
如果您在闪亮的应用程序中应用此功能,下面是一个示例,说明如何在用户选择“全部”时按“无”进行过滤。组合使用大括号 和if
else
将有效地允许您跳过应用于filter
数据集的行:
x <- "All"
cars %>%
{if(x!="All") filter(.,speed==x) else .} %>%
head()
# speed dist
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
# No data is filtered
x <- 7
cars %>%
{if(x!="All") filter(.,speed==x) else .} %>%
head()
# speed dist
# 1 7 4
# 2 7 22
# The data is filtered by x==7
Run Code Online (Sandbox Code Playgroud)