1
我試圖將數據點設置在上/下位數+/- 3 * IQR之外的數據點爲NA。我遇到的挑戰是如何通過一組數據來做到這一點。如何將函數「by」的布爾輸出與輸入矢量匹配
作爲示例,下面的數據集具有分隔列和值列。對於每個分割,我需要計算值列的上限和下限分位數和IQR,然後將滿足上述條件的值列中的數據點設置爲NA。
x <- structure(list(Split = c(1L, 1L, 3L, 2L, 2L, 2L, 2L, 1L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 3L, 1L, 3L, 2L, 3L), Value = c(0.9, 0.9, 3.5, 2.2, 2.2, 2.2, 2.2, 0.9, 3.5, 3.5, 3.5, 1.1, 3.5, 0.9, 1.9, 3.4, 0.9, 3.5, 2.2, 3.5)), .Names = c("Split", "Value"), class = "data.frame", row.names = c(NA, -20L))
我曾用「由」功能,以確定需要被設定爲NA的值:
out <- by(
x$Value,
x$Split,
function(y)
y < (quantile(y, probs=c(.25, .75), na.rm = T)[1] - 3*IQR(y, na.rm = T)) |
y > (quantile(y, probs=c(.25, .75), na.rm = T)[2] + 3*IQR(y, na.rm = T)))
的I中使用的輸出用「不公開」,設置數據點NA :
x$Value[unlist(out)] <- NA
這是行不通的。原因是「by」輸出與x $ Value列之間的不同排序。
任何有關如何匹配兩個輸出並將相應值設置爲NA的建議?
感謝。