【问题标题】:R extracting a subset from a dataframe based on regular expression applied to the column nameR根据应用于列名的正则表达式从数据框中提取子集
【发布时间】:2020-06-11 10:54:36
【问题描述】:

我有一个 R 数据框,我想根据列名过滤(创建一个子集)

数据框:

df<-data.frame( x = c(1:4), "A-1" = c(rnorm(4,11,4.4)), "A-2" = c(rnorm(4,11,4.4)), "B-2" = c(rnorm(4,11,4.4)))
x   A.1         A.2         B.2
1   8.704004    17.505799   12.025182
2   12.293454   9.452140    10.628045
3   12.100977   3.614021    8.216995
4   9.197816    13.717085   7.203580

理想情况下,新数据框的选择应对应于正则表达式,例如将所有匹配 A 的列作为第一个字符,或者将“2”作为最后一个字符。

谢谢

【问题讨论】:

    标签: r regex subset


    【解决方案1】:

    在基础 R 中,您可以像这样对列进行正则表达式选择:

    # A as first character
    df[grep("^A", names(df))] 
    
    # 2 as last character
    df[grep("2$", names(df))]
    

    dplyr 等效项是:

    library(dplyr)
    df %>%
      select(matches("^A"))
    
    df %>%
      select(matches("2$"))
    

    【讨论】:

      【解决方案2】:

      在基础 R 中,我们可以分别使用带有前缀和后缀的 startsWithendsWith。它们返回可以是 ORed (|) 的逻辑值到以 A 开头或以“2”结尾的子集列。

      df[,startsWith(names(df), 'A') | endsWith(names(df), '2')]
      
      #    A.1    A.2   B.2
      #1 19.05 11.347 11.03
      #2 12.46  7.204 10.09
      #3 23.72  8.497 16.13
      #4 11.54  2.724 17.61
      

      【讨论】:

        猜你喜欢
        • 2019-09-30
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多