我有一个矩阵(名为" my_matrix"),有150列(colnames为1,2,3,4,5,6,7,...)和100000行。
我执行以下操作:
missing = c(50,57,60,77,99,101,102,109)
for(i in 1:ncol(my_matrix)) {
if(colnames(my_matrix)[i] %in% missing) {
for(j in 1:nrow(my_matrix)) {
if(grepl('_old$', rownames(my_matrix)[j])){
my_matrix[j,i] <- my_matrix[gsub("_old", "_new", rownames(my_matrix)[j]),i]
}
}
}
}
此操作正常,并且基本上查看是否在&#34;缺少&#34;中找到列的名称。如果是,则查看行的名称是否以&#34; _old&#34;结尾。如果是这样,则将单元格的值替换为另一个单元格的值(例如,列50和行237478_old的值将替换为列50和行237478_new的值,依此类推。)
不幸的是它很慢并且需要几个小时才能执行完毕。有没有更快的方法来执行此操作(例如使用apply)?
提前致谢!
答案 0 :(得分:3)
我们创建列的索引(&#39; j1&#39;)和行(对于&#39; new&#39;和旧的&#39;行名称)和提取行/列索引的值,并替换为&#34; new&#34;中的值。行/列值。
j1 <- colnames(my_matrix) %in% missing
i1 <- grepl('_old$', rownames(my_matrix))
i2 <- grepl('_new$', rownames(my_matrix))
my_matrix[i1,j1] <- my_matrix(i2, j1]