如何基于Excel,R中的部分字符串匹配来重新排列行中的单元格

时间:2019-07-03 14:42:50

标签: r excel excel-2019

我有一个8列的大型excel电子表格。简化后看起来像这样:

Identity column1  column2  column3  column4  column5  column6  column7
     1     tk=tr   cont=fb  sourc=a  camp=b    med=c    nm=he   ad=fst
     2     camp=a  cont=fb  sourc=a   med=b     NA        NA     NA
     3     vid=tr  sourc=b  camp=b    med=c   cont=fb     NA     NA

我需要对其进行组织,以便所有包含cont的单元格都在同一列中,所有包含camp的单元格都在同一列中,依此类推。不过,它们只是部分匹配,例如,您可以看到有人说camp=b,而有人说camp=a。我需要每一列中只有一种类型的字符串,一种用于cont,一种用于sourc,一种用于camp,一种用于med

“标识”列的格式正确,并且trkvid值不是必需的,但它们仅出现在某些行中。

我研究了条件格式,高级过滤器和排序,按自定义列表排序以及vba都是excel。我很高兴转换为R文件并在那里工作。

我希望输出看起来像这样:

Identity  column1  column2  column3  column4  column5  column6  Column7
   1       cont=fb  sourc=a  camp=b    med=c    NA        NA       NA
   2       cont=fb  sourc=a  camp=a    med=b    NA        NA       NA
   3       cont=fb  sourc=b  camp=b    med=c    NA        NA       NA

cont =,sourc =,camp =和med =值是我最终产品中唯一需要的值,因此,如果我在生成此值时可以忽略/删除其他值,那将是很好的选择,但并非完全必要。

非常感谢您能提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以通过INDEX/MATCH

完成所需的操作

在四列中的每一列中使用以下公式:

=INDEX(B2:H2,MATCH("cont=*",B2:H2,))

=INDEX(B2:H2,MATCH("sourc=*",B2:H2,))

=INDEX(B2:H2,MATCH("camp=*",B2:H2,))

=INDEX(B2:H2,MATCH("med=*",B2:H2,))

然后填充

enter image description here