如何在R中维护已排序的数据帧
我有一个包含300个文件(数据帧)的列表,每个文件包含近80000行和4列。我对所有300个文件进行注释,并生成一个带注释的数据帧(假设为df2)。我希望以排序的顺序维护生成的数据帧,而不必在每次增加行时对其进行排序,因为每次对其进行排序都需要很长时间。我的最后一个数据帧应该是这样的,按排序顺序排列如何在R中维护已排序的数据帧,r,sorting,insert,R,Sorting,Insert,我有一个包含300个文件(数据帧)的列表,每个文件包含近80000行和4列。我对所有300个文件进行注释,并生成一个带注释的数据帧(假设为df2)。我希望以排序的顺序维护生成的数据帧,而不必在每次增加行时对其进行排序,因为每次对其进行排序都需要很长时间。我的最后一个数据帧应该是这样的,按排序顺序排列 Gene Name file1 file2 file3 actin, beta
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中的新条目,假设我的数据帧以一行一行的方式生成,每次我必须对数据进行排序,这需要很多时间。为了避免一次又一次的排序,它应该维护一个已排序的数据帧,并将新行按其顺序排列。我想为那个新元素腾出一个房间