根据每个组的不同条件筛选数据框

时间:2018-04-03 11:43:32

标签: r filter dplyr

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。

2 个答案:

答案 0 :(得分:4)

为什么不这样:

df %>% filter( (loc.id<4 & between(MG, 1,4)) | (between(loc.id, 5, 6) & between(MG, 5, 8)) | (loc.id>6 & MG>8))

答案 1 :(得分:0)

当我需要过滤数据帧时,我更喜欢使用ex:

的函数

dfalt <- df[which(df$MG > 5 & df$loc.id < 4), ]

这对我有用!