我有三个数据帧A,B和C.
A有18000行和18000列,B有150000行和5列。
我想用B填充A的元素。
循环需要很长时间。我怎样才能更快地运行这个循环?
A的例子
Entrez_Gene_Id 2324 34345 4345 1234 3453
1 Entrez_Gene_Id 0 0 0 0 0
2 23040 0 0 0 0 0
3 7249 0 0 0 0 0
4 64478 0 0 0 0 0
5 4928 0 0 0 0 0
6 58191 0 0 0 0 0
B
的例子 head(B)
V1 Gene1 Gene2 weight newWeight
1 1 4171 4172 2.01676494 0.020420929
2 2 2237 5111 1.933298567 0.015300857
3 4 506 509 2.439170425 0.020577243
4 7 6635 6636 2.255316779 0.081088975
5 8 6133 6210 3.427969232 0.021132906
6 10 23521 6217 1.607247743 0.027792961
这是我的代码:
B<- data.frame(lapply(C, as.character), stringsAsFactors=FALSE)
for(i in 1:nrow(B)){
Rname=B[i,2]
Cname=B[i,3]
A[Rname,Cname]=B[i,5]
print(i)
}
答案 0 :(得分:1)
好像你试图用稀疏表示法填充矩阵的矩阵。您可以使用dgCMatrix
包中的Matrix
类来执行此操作:
library(Matrix)
b_mat <- sparseMatrix(i=B[,2],j=B[,3],x=B[,5])
这使得Matrix以稀疏格式出现。要转换为18,000 x 18,000格式:
as.data.frame(as.matrix(b_mat))
编辑:我建议您在此处留下as.data.frame
来电,因为考虑到您拥有的列数,matrix
更容易合作