在保留现有NAs的同时将异常值更改为NAs

时间:2016-12-16 15:59:48

标签: r

我是r的新手。我有一个数据框,每4个不同的任务/度量(列中)显示每个参与者{在行中8 trials。我想remove outliers*(每个参与者的每个任务)并将它们转换为NA,同时保留预先存在的NA。

我正在使用的代码如下;它抛弃了预先存在的NAs(即原始数据帧中存在的NA),另外的结果是我无法获得数据帧(它不会接受as.data.frame)我认为是因为尺寸不等。我认为问题是移除异常值函数但是

  1. 我认为当对NAs的操作属于一个函数时,它只是说明如何在函数应用程序中处理NAs,并且

  2. 我试图改变整个na.rm = FALSE变化的函数但不会运行。任何帮助非常感谢。

  3.   

    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)
    
    • 这是由于我对测量设备的问题,我认为这是合理的!

1 个答案:

答案 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)