regexp and strsplit use to separate string array then save the values in new array such
我有一个列列表(超过12200x3)包含称为AffyID的字符串值,我想将它们转换为数字和符号,如表中所示,一些AffyID包含多个数字和符号,并用'///'分隔
1 2 3 4 5 6 | 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列,然后将值保存在新数组中,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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对基因Symbols列执行相同操作,但是它不起作用
您能帮我解决问题吗,我将不胜感激
我想要这样的输出:
1 2 3 4 5 | AffyID Gene Entrez GeneSymbol '53202_at' 5683 C7orf25 '53202_at' 79020 PSMA2 '214878_at' 100129482 ZNF37A '214878_at 7587 ZNF37B |
在这种情况下,
1 2 3 4 5 6 7 | >> geneEntrez geneEntrez = '5683 /// 79020' '100129482 /// 7587' '100131704 /// 149934 /// 9611'` |
以下内容将为您提供:
1 2 3 4 5 6 |
新的拆分单元格数组包含每个令牌的字符串。查找正则表达式的含义对您来说是一项练习。对于您的基因符号,您将需要表达式
1 2 3 4 5 6 7 | >> geneAffyId geneAffyId = '53202_at' '214878_at' '200855_at' |
使用以下命令组合这些单元以生成单元格数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | >> 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' |
我希望它能使您了解如何达到目标。如果要包括thiord列,您的cellfun调用将要求
1 |