【发布时间】:2018-04-03 11:43:32
【问题描述】:
df <- data.frame(loc.id = rep(1:10, each = 10),
MG = rep(1:10,times = 10),
x = runif(100))
如果我想根据多个条件过滤数据,我可以这样做:
df %>% filter(MG > 5 & loc.id < 4)
但是,我有一个过滤条件不同的情况。例如
如果loc.id小于4,则只保留MG 1-4
如果loc.id在5到6之间,只保留MG 5-8
如果loc.id大于6,只保持MG大于8。
【问题讨论】:
-
一种选择是枚举组合和左连接:使用 data.table
mDT = rbindlist(list(CJ(loc.id = 1:3, MG = 1:4), CJ(5:6, 5:8), CJ(7:10, 9:10))); setDT(df)[mDT, on=names(mDT), nomatch=0]或类似使用 dplyr。