我的数据集中有一些异常值。感兴趣的变量被命名为j_q3_1, j_q3_2,...,j_q3_14
以及j_q4_1, j_q4_2,...,j_q4_14
。我想将大于95百分位的条目改为95百分位。我想知道是否可以创建一个循环来改变问题编号(q3到q4)以及下划线后的最后一个数字(1到14)。任何建议将不胜感激。Loop将多个变量的异常值更改为R中的95%
实例数据(只有等到_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]
}
}
为您提供相同的数据集和预期产出,所以我们可以在同一个 –
谢谢合作。我添加了一个我正在使用的示例数据集来计算出循环。 – imprela