【问题标题】:selecting rows in a data.frame in which a certain column has values containing one of a set of prefixes在 data.frame 中选择行,其中某个列的值包含一组前缀中的一个
【发布时间】:2014-05-27 09:48:10
【问题描述】:

我有一个 data.frame 类型:

> head(engschools)
RECTYPE LEA ESTAB    URN                        SCHNAME               TOWN    PCODE       
1       1 919  2028 138231              Alban City School          n.a.       E1 3RR 
2       1 919  4003 138582           Samuel Ryder Academy          St Albans  AL1 5AR 
3       1 919  2004 138201 Hatfield Community Free School           Hatfield  AL10 8ES 
4       2 919  7012 117671               St Luke's School          n.a        BR3 7ET 
5       1 919  2018 138561          Harpenden Free School           Redbourn  AL3 7QA 
6       2 919  7023 117680                Lakeside School Welwyn Garden City  AL8 6YN 

还有一组像这样的前缀:

>head(prefixes)
E
AL

我想从 data.frame engschools 中选择列 PCODE 中包含 prefixes中的前缀之一的值的行>。因此,正确的结果将包含行 1:35:6,但不包含行 4

【问题讨论】:

    标签: string r dataframe subset prefix


    【解决方案1】:

    你可以试试这样的:

    mydf[grep(paste0("^", prefixes, collapse="|"), engschools$PCODE), ]
    #   RECTYPE LEA ESTAB    URN                        SCHNAME               TOWN    PCODE
    # 1       1 919  2028 138231              Alban City School               n.a.   E1 3RR
    # 2       1 919  4003 138582           Samuel Ryder Academy          St Albans  AL1 5AR
    # 3       1 919  2004 138201 Hatfield Community Free School           Hatfield AL10 8ES
    # 5       1 919  2018 138561          Harpenden Free School           Redbourn  AL3 7QA
    # 6       2 919  7023 117680                Lakeside School Welwyn Garden City  AL8 6YN
    

    在这里,我们使用了:

    • paste 创建我们的搜索模式(在本例中为 "^E|^AL")。
    • grep 识别与提供的模式匹配的行索引。
    • 基本[ 样式提取以提取相关行。

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      相关资源
      最近更新 更多