我有一个包含近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
此问题不是在生成所有数据后立即对数据进行排序。
我希望现在很清楚。