我是r的新手。我有一个数据框,每4个不同的任务/度量(列中)显示每个参与者{在行中8 trials
。我想remove outliers*
(每个参与者的每个任务)并将它们转换为NA,同时保留预先存在的NA。
我正在使用的代码如下;它抛弃了预先存在的NAs(即原始数据帧中存在的NA),另外的结果是我无法获得数据帧(它不会接受as.data.frame)我认为是因为尺寸不等。我认为问题是移除异常值函数但是
我认为当对NAs的操作属于一个函数时,它只是说明如何在函数应用程序中处理NAs,并且
我试图改变整个na.rm = FALSE变化的函数但不会运行。任何帮助非常感谢。
fname =" VSA perceptual controls_right.csv" ctrl_vsa_trials = read.csv(fname,header = TRUE,stringsAsFactors = FALSE,na.strings = c(""))
remove_outliers = function(x, na.rm = TRUE, ...){
qnt = quantile(x, probs = c(.25, .75), na.rm = na.rm, ...)
H = 1.5 * IQR(x, na.rm = na.rm)
y = x
y[x < (qnt[1] - H)] = NA
y[x > (qnt[2] + H)] = NA
y
}
ctrl_vsa_trials_clean = aggregate(cbind(Pre_first,Post_first,Pre_adj,Post_adj) ~ Ppt, ctrl_vsa_trials, remove_outliers, na.action = NULL)
答案 0 :(得分:0)
我不确定我是否理解您确切需要的内容,但如果您尝试的是使用已清理的列替换列,则可以尝试以下操作:
ctrl_vsa_trials_clean <- ctrl_vsa_trials
cols <- c("Pre_first", "Post_first", "Pre_adj", "Post_adj")
ctrl_vsa_trials_clean[, cols] <- apply(ctrl_vsa_trials_clean[, cols], 2,
remove_outliers)