【问题标题】:Filtering with multiple criteria on tidy data使用多个标准过滤整齐的数据
【发布时间】:2020-02-25 10:34:46
【问题描述】:

我在一个整洁的数据帧上使用过滤器 (dplyr) 函数:

data1<-data.frame("Time"=c(0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5),
                  "Variable"=rep(c("a","b","c","d"),6),
                  "Value"=c(0,1,0,0,1,1,1,1,1,3,2,3,10,1,3,7,2,1,4,2,3,1,5,13))

我想要做的是过滤变量“a”等于2和变量“a”最大的时间。 对于第一种情况,mi 代码是:

data1<-data1%>%
  group_by(Time)%>%
  filter(any(Variable=="a" & Value==2))

工作正常并给我:

Time Variable Value
2    a        2 
2    b        1
2    c        4
2    d        2

现在不知道怎么可能是 a=max(a),我试过了:

data1<-data1%>%
  group_by(Time)%>%
  filter(any(Variable=="a" & Value==max(Value)))

但不起作用(因为最大值是在所有列变量上计算的)我想我需要类似的东西 值=最大值(值)[变量$a]。 被过滤的必须这样做:

Time Variable Value
3    a        10 
3    b        1
3    c        3
3    d        7

我更喜欢 dplyr 的解决方案。任何人都可以给我一个一般规则,用多个标准过滤整洁的 df 吗?

【问题讨论】:

    标签: r dplyr tidy


    【解决方案1】:

    这是一种 dplyr 方式:

    library(dplyr)
    data1%>%
      filter(Time == Time[Value == max(Value[Variable == "a"])])
    

    还有一个data.table方式

    library(data.table)
    setDT(data1)
    data1[Time == Time[Value == max(Value[Variable == "a"])]]
    

    【讨论】:

      【解决方案2】:

      附加选项

      data1 %>% 
        filter(Variable == "a") %>% 
        filter(Value == max(Value, na.rm = T)) %>% 
        select(Time) %>% 
        left_join(., data1, by = "Time")
      

      【讨论】:

        【解决方案3】:

        根据编辑后的标准,这应该会提供所需的结果。

        data1 <- data1 %>%
                 group_by(Time) %>%
                 filter(any(Variable=="a" & 
                            Value==max(data1$Value[data1$Variable == 'a'])))
        

        【讨论】:

        • 感谢您的支持。我需要在过滤的df中包含所有变量,而不仅仅是“a”。我重新编辑我的问题,因为我知道,不是很清楚。
        • 谢谢,它可以工作,但是有没有办法以“dplyr-tidy”的方式做到这一点,没有基本的 r 命令,也没有在过滤器函数中再次对原始 df 进行子集化?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 2020-01-19
        • 2013-11-19
        相关资源
        最近更新 更多