【发布时间】:2016-01-15 22:57:28
【问题描述】:
我有一个包含 150 列和 100.000 行的矩阵 (all_parameters)。该矩阵中每个数据元素的值为“1”。现在,如果满足以下条件,我想将这些值替换为“0”:
列名 10, 14, 27 行名以“T1_”开头
我有以下工作正常的循环:
T1_missing = c(10,14,27)
for(i in 1:ncol(all_parameters)) {
if (any(T1_missing == as.integer(colnames(all_parameters)[i]))) {
for(j in 1:nrow(all_parameters)) {
if(grepl("^T1_", rownames(all_parameters)[j])) {
all_parameters[j,i] <- 0
}
}
}
}
问题在于循环的执行需要非常长的时间。我已经尝试使用 apply 功能,但是我无法使其工作。谁能告诉我如何使用 apply 函数(或其他任何比 for 循环更好更快的方法)来解决这个问题。
感谢您的帮助!
【问题讨论】:
-
我不确定我是否理解正确,但你为什么要遍历所有列?当然,您可以选择有问题的三列,然后检查这三列的行吗?
-
是的,我确实可以只检查那三行。但是,我也想在其他条件下执行此代码,我还需要检查其他行(然后通常只检查三行以上)。