【问题标题】:Filter out a group of a data.frame based on multiple conditions that apply at a specific time point根据在特定时间点应用的多个条件过滤出一组 data.frame
【发布时间】:2021-01-27 20:34:20
【问题描述】:

我的数据框是这样的。

data=data.frame(group=c("A","B","C","A","B","C","A","B","C"), 
                time= c(rep(1,3),rep(2,3), rep(3,3)), 
                value=c(0,1,1,0.1,10,20,10,20,30))

  group time value
1     A    1   0.2
2     B    1   1.0
3     C    1   1.0
4     A    2   0.1
5     B    2  10.0
6     C    2  20.0
7     A    3  10.0
8     B    3  20.0
9     C    3  30.0

我想强调我在时间点 1 的搜索,并基于该时间点的值 时间点从后面的时间点中过滤掉不满足条件的组。

我想删除时间点 1 上大于 0.5 的组的值 并且小于 0.1。 我希望我的 data.frame 看起来像这样。

  group time value
1     A    1   0.2
2     A    2   0.1
3     A    3  10.0

非常感谢任何帮助。

【问题讨论】:

  • 共享的数据与显示的数据不同。第一个 value 在您共享的数据中为 0,而您已将其显示为 0.2。
  • 你是对的@Ronak。我将编辑问题。也感谢您的简洁回答。

标签: r dplyr tidyverse


【解决方案1】:

您可以选择valuetime = 1 介于 0.1 和 0.5 之间的组。

library(dplyr)

data %>%
  group_by(group) %>%
  filter(between(value[time == 1], 0.1, 0.5))

#  group  time value
#  <chr> <dbl> <dbl>
#1 A         1   0.2
#2 A         2   0.1
#3 A         3  10  

【讨论】:

  • Ronak,你在过滤器中输入的内容和这个有什么区别:filter(time == 1 & (value >= 0.1 & value
  • 在您的情况下,它将仅选择 time == 1 所在组中的行。我们要选择组的整行。
猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 2015-03-26
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 2017-08-03
  • 1970-01-01
相关资源
最近更新 更多