기후 데이터가 있는데 이상한 데이터를 NA
으로 대체하려고합니다. boxplot(x)$out
은 아웃 라이어를 계산할 값의 범위가 있기 때문에 사용하지 않습니다.R에서 특정 범위의 값을 갖는 NA로 이상 치를 대체하는 방법?
temp_range <- c(-15, 45)
wind_range <- c(0, 15)
humidity_range <- c(0, 100)
내 dataframe이
(나는 NA는 범위에 따라 교체해야합니다 값을 강조했다.)과 같은
그래서 temp1
및 temp2
아웃 라이어가 NA
로 교체해야합니다 temp_range
에 따르면 wind
의 아웃 라이어는에 따라 NA
으로 대체되어야합니다.이고 마지막으로 humidity
의 특이 치는 humidity_range
에 따라 NA
으로 대체되어야합니다. 여기
df <- read.csv2("http://pastebin.com/raw/vwqBu2M5", stringsAsFactors = FALSE)
df[,2:5] = apply(df[,2:5], 2, function(x) as.numeric(x))
#Ranges
temp_range <- c(-15, 45)
wind_range <- c(0, 15)
humidity_range <- c(0, 100)
#Function to detect outlier
in_interval <- function(x, interval){
stopifnot(length(interval) == 2L)
interval[1] <= x & x <= interval[2]
}
#Replace outliers according to temp_range
cols <- c('temp1', 'temp2')
df[, cols] <- lapply(df[, cols], function(x) {
x[in_interval(x, temp_range)==FALSE] <- NA
x
})
. 반복을 피할 수 있도록 단순화하는 방법이 있습니까?
마지막으로, cols <- c('wind')
이 경고를 내고 전체를 바람을 열로 바꿉니다.
Warning message:
In `[<-.data.frame`(`*tmp*`, , cols, value = list(23.88, 23.93, :
provided 10 variables to replace 1 variables
의견이 있으십니까?
결과가 출력과 유사해야합니다. 첫 번째와 두 번째 교체 라인을 lapply에서 할 수 있습니까? 그것들은 매우 유사하게 보이고 샘플을 게시했습니다. 'temp_range'를 기반으로 한 컬럼이 더 많아서이 대체 라인의 크기가 늘어나고 더 동적으로 처리하기를 원합니다. –