【问题标题】:R - Find partially matching tuplesR - 查找部分匹配的元组
【发布时间】:2013-08-02 09:50:31
【问题描述】:

假设你有一个如下的数据框:

column1   column2    column3    column4
   1        124         2          a
   2        125         4          b
   3        124         6          c
   4        126         8          d
   5        150         10         e

如果数据框包含仅基于两列满足条件的任何元组,那么找出 (TRUE/FALSE) 的最有效(即最快)方法是什么?

如果存在满足条件column1==1 & column2<140 & column2>130 的元组,您将如何查找(不使用循环)? (当然,在这种情况下,结果必须返回FALSE)。

【问题讨论】:

    标签: r


    【解决方案1】:

    正如@Tomas 指出的那样 - 你快到了:

    any(df$column1==1 & df$column2<140 & df$column2>130)
    #[1] FALSE
    

    或者...

    with(df,any(column1==1 & column2<140 & column2>130))
    #[1] FALSE
    

    【讨论】:

    • +1 用于使用“任何”功能——不知道!很有用!
    • +1 与any 的优雅解决方案,这个答案可能更适合这个问题。
    【解决方案2】:

    几乎和你写的一模一样:

    df[df$column1==1 & df$column2<140 & df$column2>130,]
    

    with(df, df[column1==1 & column2<140 & column2>130,])
    

    【讨论】:

      【解决方案3】:

      或者使用data.tablebetween语法糖:

      library(data.table)
      DT <- data.table(dat)
      DT[column1==1 & column2 %between% c(130,140)]
      

      【讨论】:

      • agstudy,你必须使用DT$column1,对吧?或者这是另一种“语法糖”? :-)
      • @Tomas - data.table's 允许您在没有 $ 符号的情况下访问变量。
      • 有趣!在标准 R 中会喜欢这个,因为必须一遍又一遍地写 df$ 是无休止的讨厌。 +1 语法糖!
      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多