如果达到变量限制,如何过滤(使用dplyr)组的所有值?

时间:2015-04-14 14:29:31

标签: r dplyr data-manipulation

这是虚拟数据:

cases <- rep(1:5,times=2)
var1 <- as.numeric(c(450,100,250,999,200,500,980,10,700,1000))
var2 <- as.numeric(c(111,222,333,444,424,634,915,12,105,152))

maindata1 <- data.frame(cases,var1,var2)

df1 <-  maindata1 %>%
  filter(var1 >950) %>%
  distinct(cases) %>%
  select(cases)

table1 <- maindata1 %>%
  filter(cases == 2 | cases == 4 | cases == 5) %>%
  arrange(cases)

> table1
  cases var1 var2
1     2  100  222
2     2  980  915
3     4  999  444
4     4  700  105
5     5  200  424
6     5 1000  152

我正在尝试制定一个数据框,其中包含与var1> 950的情况相关的所有数据,因此它会显示这些情况的var1的每个值(也是那些&lt; 950的值)和var2的所有值并且会丢弃var1不会达到> 950的所有情况。 Table1生成所需的数据帧,但我必须手动输入过滤条件。有没有办法使用df1 $ case作为过滤条件来提取相同的数据帧?

我是R的新手并且主要尝试使用dplyr来学习数据操作,因为它的语法对于外行人来说几乎是可以理解的...所以如果有人能提供基于dplyr的解决方案,那将是太棒了,当然我愿意听取基于其他软件包的解决方案。

1 个答案:

答案 0 :(得分:1)

max(var1)

定义的每个组中按cases过滤
maindata1 %>%
  group_by(cases) %>%
  filter(max(var1) > 950) %>%
  arrange(cases)

#   cases var1 var2
# 1     2  100  222
# 2     2  980  915
# 3     4  999  444
# 4     4  700  105
# 5     5  200  424
# 6     5 1000  152