在R中如何用单个filter()函数按因子级别与日期范围过滤行
单个filter()实现多条件组合过滤的解决方案
原始数据
假设我们有如下R DataFrame df:
# 数据结构与内容 df <- structure(list( code = factor(c("01", "01", "01", "01", "02", "02", "02", "02")), date = as.Date(c("2000-01-01", "2005-01-01", "2010-01-01", "2015-01-01", "2000-01-01", "2005-01-01", "2010-01-01", "2015-01-01")), value = c(23, 435, 1000, 65, 2, 50000, 3243, 6473) ), class = "data.frame")
需求说明
需要过滤掉两类行:
code为"01"且date≤"2010-01-01"的行code为"02"且date>"2010-01-01"的行
保留剩余数据,最终结果如下:
# 预期结果 # code date value # 1 01 2015-01-01 65 # 2 02 2000-01-01 2 # 3 02 2005-01-01 50000 # 4 02 2010-01-01 3243
简洁解决方案:单个filter()实现
无需拆分合并,直接在filter()中组合正向保留条件即可,把拆分筛选的两个条件用|(或)连接:
df_filtered <- df |> filter( (code == "01" & date > "2010-01-01") | (code == "02" & date <= "2010-01-01") )
也可以用反向取反逻辑,直接排除需要过滤的行,结果完全一致:
df_filtered <- df |> filter( !((code == "01" & date <= "2010-01-01") | (code == "02" & date > "2010-01-01")) )
两种写法都能在单个filter()调用中完成需求,避免拆分合并的冗余操作。
内容的提问来源于stack exchange,提问作者johnny_gillette
相关产品推荐
相关产品推荐

