Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中维护已排序的数据帧_R_Sorting_Insert - Fatal编程技术网

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

如何在R中维护已排序的数据帧,r,sorting,insert,R,Sorting,Insert,我有一个包含300个文件(数据帧)的列表,每个文件包含近80000行和4列。我对所有300个文件进行注释,并生成一个带注释的数据帧(假设为df2)。我希望以排序的顺序维护生成的数据帧,而不必在每次增加行时对其进行排序,因为每次对其进行排序都需要很长时间。我的最后一个数据帧应该是这样的,按排序顺序排列 Gene Name file1 file2 file3 actin, beta

我有一个包含300个文件(数据帧)的列表,每个文件包含近80000行和4列。我对所有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
注意:
我之所以要维护已排序的数据帧,是因为在此期间我需要执行其他搜索操作,因此顺序搜索需要花费大量时间。通过维护已排序的数据帧,我可以轻松地进行二进制搜索,从而节省大量时间

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

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 
现在,我正在读取
文件1
(AFFX-BioB-5_at)
的第一个id,以从主文件
(盘状结构域受体酪氨酸激酶1)
中获取其基因名,并从文件1中读取其检测调用
p
,将其放入一个新的数据帧中,让它成为df2。对于其他
id
也将执行相同的过程

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`
正如你在上面看到的,基因名称在肌动蛋白、β蛋白之后没有按顺序排列。因此,将该基因置于盘状结构域受体酪氨酸激酶1之前。因此,修改后的df2将

Gene Name                                         file1
actin, beta                                        NA
discoidin domain receptor tyrosine kinase 1        P
EPH receptor B3                                    P
estrogen-related receptor alpha                    NA
注意
此问题与生成所有数据后立即对数据进行排序不同。
我希望现在一切都清楚了。

我可能没有抓住要点,但是当您在排序的data.frame列中插入一个值时,该值不需要在数据集中排序。@akrun,不是所有的值(行),它应该将新值放在它的位置。我不确定,但我认为它应该更像是一个链表,我们可以在其中的特定位置插入。假设值
8
是向量
v1中的新条目,假设我的数据帧以一行一行的方式生成,每次我必须对数据进行排序,这需要很多时间。为了避免一次又一次的排序,它应该维护一个已排序的数据帧,并将新行按其顺序排列。我想为那个新元素腾出一个房间