【问题标题】:How to filter (with dplyr) for all values of a group if variable limit is reached?如果达到变量限制,如何过滤(使用 dplyr)组的所有值?
【发布时间】:2015-06-20 05:20:37
【问题描述】:

这是虚拟数据:

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 的每个值(以及 950 的情况。 Table1 生成所需的数据框,但我必须手动输入过滤条件。有没有办法使用 df1$cases 作为过滤条件来提取相同的数据帧?

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

【问题讨论】:

  • 你能用 10 行而不是 250 行组成一个示例,然后以表格的形式发布所需的结果吗?
  • 这可能就是你要找的东西:mutate(maindata1, var2 = replace(var2, var1 &lt; 950, NA))
  • Vlo,很抱歉 mutate() 没有带来预期的结果。我按照 rmuc8 的建议编辑了原始帖子,也许我的目标现在更容易理解了?

标签: r dplyr data-manipulation


【解决方案1】:

cases定义的每个组中按max(var1)过滤:

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

【讨论】:

  • 这正是我想要的。谢谢!!我曾经用 base-package 创建了类似的东西,现在当我将该脚本与这个 dplyr 版本进行比较时,它让我比以前更喜欢 dplyr。
猜你喜欢
  • 2018-11-17
  • 1970-01-01
  • 2020-05-14
  • 2018-04-07
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多