如何在R中维护排序的数据框

时间:2015-01-08 11:04:45

标签: r sorting insert

我有一个包含近80000行和4列的300个文件(数据帧)的列表。我注释所有300个文件并生成一个带注释的数据框,假设为df2。我希望按排序顺序维护生成的数据框,而不是每次增加行时对其进行排序,因为每次排序需要很长时间。我的最终数据框应如下所示,它是按排序顺序排列的。

Gene Name                                         file1         file2       file3
actin, beta                                        NA             P          NA
chemokine (C-C motif) ligand 5                     P              P           P
cytochrome P450, family 2, subfamily               A              NA          P 
cytochrome P450, family 2, subfamily E,   1P       NA             A           P
discoidin domain receptor tyrosine kinase 1        P              NA          P
EPH receptor B3                                    P              P           P
estrogen-related receptor alpha                    NA             P           NA
glyceraldehyde-3-phosphate dehydrogenase           NA             P           NA

Note:为什么我要维护一个排序数据框是因为在我之间需要做其他搜索操作,所以顺序搜索需要花费很多时间。通过维护已排序的数据框,我可以轻松地进行二进制搜索,从而节省大量时间。

我编写了以下代码,但每次在数据框中输入条目时,它都会对数据进行排序。

p=1
    if (i == 1) ## file 1    
    {
        df2[p,1]=df1[k,10]       ## writing into the data frame
        df2[p,2]= df[[i]][j,3]
        df2=d1[do.call(order, d1),]   
        print(d1)
        p+1
    }

所以我想插入已排序的数据框而不是一次又一次地对其进行排序。

已编辑:假设我有300个这样的文件。

*ID_REF**       VALUE**  ABS_CALL**
AFFX-BioB-5_at  757.7    P
AFFX-BioB-M_at  933.7    P
AFFX-BioB-3_at  525.6    P
AFFX-BioC-5_at  1999.5   P
AFFX-BioC-3_at  2339.5   P
AFFX-BioDn-5_at 4321.3   P
AFFX-BioDn-3_at 9229.4   P

我有如下GPL(主)文件:

*ID_REF**              Gene Name
AFFX-BioB-5_at         discoidin domain receptor tyrosine kinase 1    
AFFX-BioB-M_at         EPH receptor B3                                  
AFFX-BioB-3_at         estrogen-related receptor alpha               
AFFX-BioC-5_at         glyceraldehyde-3-phosphate dehydrogenase 
AFFX-BioC-3_at         actin, beta                                       
AFFX-BioDn-5_at        chemokine (C-C motif) ligand 5                     
AFFX-BioDn-3_at        cytochrome P450, family 2, subfamily 

现在我正在读取file1 (AFFX-BioB-5_at)的第一个ID,以便从主文件( discoidin domain receptor tyrosine kinase 1)获取其基因名称,并从file1检测其p在一个新的数据框架中,让它为df2。其他IDs也将采用相同的流程。

df2

Gene Name                                         file1
discoidin domain receptor tyrosine kinase 1        P
EPH receptor B3                                    P
estrogen-related receptor alpha                    NA
 actin, beta                                       NA    `### new gene not in order`

如您所见,actin,beta添加后,基因名称不按排序顺序排列。所以把基因放在discoidin domain receptor tyrosine kinase 1之前。所以修改后的df2将是

Gene Name                                         file1
actin, beta                                        NA
discoidin domain receptor tyrosine kinase 1        P
EPH receptor B3                                    P
estrogen-related receptor alpha                    NA

Note此问题不是在生成所有数据后立即对数据进行排序。  我希望现在很清楚。

0 个答案:

没有答案