我有两个大数据帧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的新学习者,如果您能在这方面帮助我,我将不胜感激。
答案 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