如何解决使用 if_else 或 case_when 以两种不同的方式有条件地过滤数据帧
最小示例 - 我有 3 个主题的 9 个回答,其中包含两个问题:
set.seed(1)
df <- data.frame(ID = c(rep("A",2),rep("B",3),rep("C",4)),Q1 = sample(0:5,9,replace=T),Q2 = sample(1:7,Days_Used = c(rep(10,rep(5,rep(4,4))
)
将 Days_Used 视为 End_Date - Start_Date。我想以两种方式之一过滤数据框 - 通过 Days_Used 或填写问卷的次数(即通过与主题相关的行数),具体取决于变量 FILTER_BY_DAYS_USED
是否为 {{ 1}} 或 TRUE
。我尝试了以下方法:
FALSE
但是当我执行它时得到一个错误信息
FILTER_BY_DAYS_USED <- TRUE
df %>%
group_by(ID) %>%
if_else(FILTER_BY_DAYS_USED,filter(Days_Used >= 5),filter(n() >= 3))
我想获得以下输出:
-
当
Error: `condition` must be a logical vector,not a grouped_df/tbl_df/tbl/data.frame` object.
为FILTER_BY_DAYS_USED
时:对应主题A和B的前5行 -
当
TRUE
为FILTER_BY_DAYS_USED
时:B和C对应的最后7行
我的条件过滤器的正确语法是什么?
非常感谢
托马斯飞利浦
解决方法
你的方向是正确的。尝试使用 if
/else
,因为这是一个标量比较。
library(dplyr)
FILTER_BY_DAYS_USED <- TRUE
df %>%
group_by(ID) %>%
filter(if(FILTER_BY_DAYS_USED) Days_Used >= 5 else n() >= 3) %>%
ungroup
# ID Q1 Q2 Days_Used
# <chr> <int> <int> <dbl>
#1 A 0 3 10
#2 A 3 1 10
#3 B 0 5 5
#4 B 1 5 5
#5 B 4 2 5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。