【发布时间】:2020-11-14 23:09:03
【问题描述】:
我有 571 列对应于 571 种不同的代谢物,还有一个带有参与者 ID 的列。使用下面的代码,我可以分别识别每个代谢物的异常值的参与者(平均值 +/- 3 * sd)。
out<-data
[which(
data$Met1 > mean(data$Met1, na.rm=T) + 3* sd(data$Met1, na.rm=T) |
data$Met1 > mean(data$Met1, na.rm=T) + 3* sd(data$Met1, na.rm=T)
),
]
但是,我希望能够自动执行此操作,因此输出是一个包含 572 列的表,其中一个用于 ID 号,然后是 571 个代谢物的相应异常值(如果有),其中 NA 填充空格对于该 ID 没有异常值的代谢物。例如。
ID Met1 Met2 Met3...
56 NA 0.145 NA
72 0.09 0.07 NA
98 NA NA 0.0098
我正在处理 for 循环,但一直遇到错误。任何帮助将不胜感激。
for ( i in 1:ncol(data[, 2:572]){
outlier1 <-data[,i] > mean(data[,i]) + 3*sd(data[, i])
outlier2 <- data[,i] > mean(data[,i]) - 3*sd(data[,i])
need <- outlier1 + outlier2
})
【问题讨论】: