내 데이터 세트에 특이 치가 있습니다. 관심 변수의 이름은 j_q3_1, j_q3_2,...,j_q3_14
및 로 지정됩니다 j_q4_1, j_q4_2,...,j_q4_14
. 95 백분위 수보다 큰 항목을 95 백분위 수로 변경하고 싶습니다. 질문 번호 (q3에서 q4)와 밑줄 뒤의 마지막 번호 (1에서 14)를 변경하는 루프를 만들 수 있는지 궁금합니다. 어떤 제안이라도 대단히 감사하겠습니다.
예제 데이터 (_2 및 q3 및 q4까지만) :
test <- data.frame(hhid = c(1:5), j_q3_1 =c(1000,1500,2000,5000,10000), j_q4_1=c(500,100,200,10000,200), j_q5_1 =c(200,300,400,203,100), j_q3_2 =c(300,10000,200,300,200), j_q4_2=c(100,200,320,120,302), j_q5_2=c(10000,120,1222,300,2333))
이 코드는 모든 변수에 대해 작동합니다.
quantiles <- quantile(test$j_q3_1,c(0.95))
test$j_q3_1[test$j_q3_1 > quantiles[1]] <- quantiles[1]
quantiles <- quantile(test$j_q4_1,c(0.95))
test$j_q4_1[test$j_q4_1 > quantiles[1]] <- quantiles[1]
quantiles <- quantile(test$j_q3_2,c(0.95))
test$j_q3_2[test$j_q3_2 > quantiles[1]] <- quantiles[1]
quantiles <- quantile(test$j_q4_2,c(0.95))
test$j_q4_2[test$j_q3_2 > quantiles[1]] <- quantiles[1]
이제 전체 데이터 세트에 코드를 사용하려고 시도하고 조건을 99 % 신뢰 구간으로 변경했습니다. 변수의 99 %가 9260 일 때 25000의 특이 치가 동일하게 유지되기 때문에 작동하지 않습니다. 평균을 1606에서 1813으로 변경하고 NA를 2825에서 2801로 줄였습니다.
for (i in 3:6){
for (j in 1:14){
cname <- paste0("j_q", i, "_", j)
quantiles <- quantile(test[, cname], c(0.99), na.rm = TRUE)
test[test[!is.na(test[, cname]), cname] > quantiles[1], cname] <- quantiles[1]
}
}
다음과 같이 할 수 있습니다.
cname <- paste0("j_q", i, "_", j)
quantiles <- quantile(test[, cname], c(0.99))
test[test[, cname] > quantiles[1], cname] <- quantiles[1]
NA 값이있는 경우 :
cname <- paste0("j_q", i, "_", j)
quantiles <- quantile(test[, cname], c(0.99), na.rm = TRUE)
test[!is.na(test[,cname]) & test[, cname] > quantiles[1], cname] <- quantiles[1]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다