gpt4 book ai didi

r - 使用 if_else 或 case_when 以两种不同的方式有条件地过滤数据帧

转载 作者:行者123 更新时间:2023-12-03 08:24:30 27 4
gpt4 key购买 nike

最小示例 - 我收到了 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, 9, replace=T),
Days_Used = c(rep(10, 2), rep(5, 3), rep(4, 4))
)

将 Days_Used 视为结束日期 - 开始日期。我想以两种方式之一过滤数据框 - 按 Days_Used 或填写调查问卷的次数(即按与主题关联的行数),具体取决于变量 FILTER_BY_DAYS_USEDTRUEFALSE。我尝试了以下方法:

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.

我想获得以下输出:

  1. FILTER_BY_DAYS_USEDTRUE时:对应主题A和B的前5行

  2. FILTER_BY_DAYS_USEDFALSE时:与主题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

关于r - 使用 if_else 或 case_when 以两种不同的方式有条件地过滤数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66962249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com