【发布时间】:2020-10-24 11:34:09
【问题描述】:
我想知道如何以尽可能自动化的方式替换一系列矩阵中的观察值,这些矩阵的替换规则因矩阵列而异。
我有大量矩阵要处理 (~240)。处理需要用 0 替换一定数量的观察值。每个矩阵具有相同的维度并包含两种类型的列,这需要不同的截止值,在该截止值处,该列中的所有观察值都应替换为 0。矩阵根据截止值而有所不同关闭时应将观察值替换为 0。我已经找到了一种处理数据的方法,但它非常缓慢且需要手动操作,我想知道是否有一种方法可以通过函数自动执行此操作或 for 循环。
例如,在矩阵x 中,如果大于 45,则第 3,4 和 9 列中的观察值需要变为 0,如果大于 70,则所有其他列中的观察值需要变为 0。
我想到了两种替换数据的方法,下面都有详细介绍:
cols <- c(3,4,9)
x <- matrix(sample(1:100),10,10)
#attempt 1
x[x>70] <- 0 # replace all values > 70 with 0 (true for all columns)
x.sub <- x[,cols] # subset columns with lower limit
x.sub[x.sub>45] <- 0 # replace all values > 45 with 0 for the subset (rule 2 columns)
x[,cols] <- x.sub # add revised values back to main object
#attempt 2
x.sub1 <- x[,-cols] # subset columns that follow rule 1
x.sub1[x.sub1>70] <- 0 # replace all values over 70 with 0
x.sub2 <- x[,cols] # subset columns that follow rule 2
x.sub2[x.sub3>45] <- 0 # replace all values over 45 with 0
x[,-cols] <- x.sub1 # add revised values back to main object (rule 1 columns)
x[,cols] <- x.sub2 # add revised values back to main object (rule 2 columns)
任何帮助将不胜感激!
【问题讨论】: