我有列的列表(超过12200x3)包含名为AffyID的字符串值,我想将它们转换为数字和符号,如表中所示,一些AffyID有多个数字,符号用'///'分隔
AffyID Gene Entrez GeneSymbol
'53202_at' '5683 /// 79020' 'C7orf25 /// PSMA2'
'214878_at' '100129482 /// 7587' 'ZNF37A /// ZNF37B'
'200855_at' '100131704 /// 149934 /// 9611' 'C20orf191 /// LOC100131704 /// NCOR1'
'200856_x_at' '100131704 /// 149934 /// 9611' 'C20orf191 /// LOC100131704 /// NCOR1'
'200869_at' '390354 /// 6142' 'RPL18A /// RPL18AP3'
我使用strfind分离Gene Entrez列,然后将值保存在新数组中,例如
p1=strfind(EntrezList,'///');
if(isempty(p1))
j=j+1;
filteredData(j,1)=raw_data(i,1);
filteredData(j,2)=raw_data(i,2);
filteredData(j,3)=raw_data(i,3);
else
j=j+1;
entrez_ID=EntrezList(1:p1(1)-1);
filteredData{j,1}= raw_data{i,1};
filteredData{j,2}= str2double(entrez_ID);
filteredData(j,3)= raw_data(i,3);
if( length(p1)>1)
for k=1:length(p1)-1
j=j+1;
entrez_ID=EntrezList(p1(k)+3:p1(k+1)-1);
filteredData{j,1}= raw_data{i,1};
filteredData{j,2}= str2double(entrez_ID);
filteredData(j,3)= raw_data(i,3);
end
不幸的是我尝试使用regexp和strsplit对基因符号列执行相同的操作但是它不起作用
你能帮忙解决一下我会感激你的问题 我希望输出像:
AffyID Gene Entrez GeneSymbol
'53202_at' 5683 C7orf25
'53202_at' 79020 PSMA2
'214878_at' 100129482 ZNF37A
'214878_at 7587 ZNF37B
答案 0 :(得分:0)
regexp
可以节省生命。我建议你通过阅读文档并在regex101.com上尝试表达来试一试。在这种情况下,如果工作区中有以下变量:
>> geneEntrez
geneEntrez =
'5683 /// 79020'
'100129482 /// 7587'
'100131704 /// 149934 /// 9611'`
以下内容将为您提供:
geneEntrezSplit = regexp(geneEntrez,'(\d*)\D*','tokens')
geneEntrezSplit =
{1x2 cell}
{1x2 cell}
{1x3 cell}
新的拆分单元格数组包含每个标记的字符串。找到正则表达式的含义是一项练习。对于您的基因符号,您需要表达式(\w*)\W*
。现在,如果您有Affy Id vaiables:
>> geneAffyId
geneAffyId =
'53202_at'
'214878_at'
'200855_at'
使用以下方法组合这些以生成单元格数组:
>> splitData = cellfun(@(x1,x2)[repmat({x1},length(x2),1) [x2{:}]'],geneAffyId,geneEntrezSplit,'UniformOutput',false)
splitData =
{2x2 cell}
{2x2 cell}
{3x2 cell}
>>tfmData = vertcat(splitData{:})
tfmData =
'53202_at' '5683'
'53202_at' '79020'
'214878_at' '100129482'
'214878_at' '7587'
'200855_at' '100131704'
'200855_at' '149934'
'200855_at' '9611'
我希望它能让您了解如何获得结果。如果你想要包含你的cellfun调用想要的thiord列
splitData = cellfun(@(x1,x2,x3)[repmat({x1},length(x2),1) [x2{:}]' [x3{:}]'],geneAffyId,geneEntrezSplit,geneSymbolSplit'UniformOutput',false)