代码之家  ›  专栏  ›  技术社区  ›  Samima

列名第一部分的子集

  •  1
  • Samima  · 技术社区  · 8 年前

    我有两个大数据帧df1和df2。我只想保留那些使用df2的列,这些列与df1的列名(代表公司名称)的第一部分匹配。这意味着我想通过匹配df1中的公司名称来子集df2。文件如下所示:

    df1型

    date       Com1 - PI    Com3 - PI   Com6 - PI
    1/1/2007    292782.4    101780.7    2406010
    1/2/2007    292782.4    101780.7    2406010
    1/3/2007    292782.4    101780.7    2406010
    

    df2型

    date        Com1 - CV  Com2- CV  Com3 - CV   Com4 - CV   Com5- CV    Com6 - CV
    6/6/1990    1.57         NA        5.3         NA          NA          4.51
    6/7/1990    1.57         NA        5.2         NA          NA          4.51
    6/8/1990    1.59         NA        5.4         NA          NA          4.51
    6/11/1990   1.59         NA        5.2         NA          NA          4.51
    

    预期输出(df2的子集)

    date      Com1 - CV     Com3 - CV       Com6 - CV
    6/6/1990    1.57           5.3            4.51
    6/7/1990    1.57           5.2            4.51
    6/8/1990    1.59           5.4            4.51
    6/11/1990   1.59           5.2            4.51
    

    作为r的新学员,如果您能在这方面帮助我,我将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  1
  •   akrun    8 年前

    用regex删除第一个单词后的部分,然后使用 %in% 获得精确匹配

    df2[sub("\\s*-\\s*.*", "", names(df2)) %in% sub("\\s*-\\s*.*", "", names(df1))]
    #       date Com1 - CV Com3 - CV Com6 - CV
    #1  6/6/1990      1.57       5.3      4.51
    #2  6/7/1990      1.57       5.2      4.51
    #3  6/8/1990      1.59       5.4      4.51
    #4 6/11/1990      1.59       5.2      4.51