【发布时间】:2016-02-08 14:25:44
【问题描述】:
我有三个数据框 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)
}
【问题讨论】:
-
你能显示
A和B中的内容吗 -
不要使用循环。 R 中的许多操作都是矢量化的。
-
试试
A[cbind(B[,2],B[,3])] <- B[,5] -
B 是字符,A 是整数。
-
这是一个很好的问题示例。用户不仅提供了数据外观的示例。他们也有他们想要的输出。请编辑您的问题。 stackoverflow.com/questions/4862178/…