【问题标题】:change outliers to NAs while keeping existing NAs在保留现有 NA 的同时将异常值更改为 NA
【发布时间】:2017-05-02 11:17:56
【问题描述】:

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

我使用的代码如下;它丢弃了预先存在的 NA(即存在于原始数据帧中的 NA),而额外的结果是我无法取回数据帧(它不会接受 as.data.frame)我认为是因为大小不等.我认为问题是删除异常值功能,但是

  1. 我认为当 NA 上的操作在函数内时,它只是说明如何仅在函数应用期间处理 NA,并且

  2. 我试图通过 na.rm = FALSE 的变化来更改函数,但它不会运行。非常感谢任何帮助。

fname = "VSA 感知控件_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)
  • 这是由于我的测量设备出现问题,我觉得这是合理的!

【问题讨论】:

  • “抛弃现有的 NA”是什么意思?

标签: r


【解决方案1】:

我不确定我是否了解您的确切需求,但如果您尝试用已清理的列替换列,您可以试试这个:

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)

【讨论】:

  • 仔细观察,这不是我需要的。据我所知,建议的解决方案消除了每个任务的异常观察值。但是,我想删除每个任务每个参与者计算的异常值。
  • 您将不得不为您的数据集考虑合适的形状,是每个参与者 * 任务一行,包含 8 个任务度量,还是每个参与者一行,或者您想要转置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2020-10-14
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多