列名称的第一部分的子集

时间:2018-03-24 08:52:57

标签: r subset

我有两个大数据帧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 个答案:

答案 0 :(得分:1)

使用正则表达式删除第一个单词后的部分,然后使用%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