r - 如何从数据框中删除超出变量特定范围的记录? [R]

标签 r outliers

我有一个数据框和一个我想应用于数据的预测模型。但是,我想过滤掉模型可能不太适用的记录。为此,我有另一个数据框,其中包含训练数据中观察到的每个变量的最小值和最大值。我想从我的新数据中删除那些一个或多个值超出指定范围的记录。

为了让我的问题更清楚,这就是我的数据可能的样子:

  id   x       y     
 ---- ---- --------- 
   1    2     30521  
   2   -1      1835  
   3    5     25939  
   4    4   1000000  

这是我的第二张表,包括最小值和最大值,可能看起来像:
  var   min    max   
 ----- ----- ------- 
  x       1       5  
  y       0   99999  

在这个例子中,我想在我的数据中标记以下记录:2(低于 x 的最小值)和 4(高于 y 的最大值)。

我怎么能在 R 中轻松地做到这一点?我有一种预感 dplyr可以完成此任务的代码,但我不知道它会是什么样子。

最佳答案

你有这样的数据:

df = data.frame(x=c(2,-1,5,4,7,8), y=c(30521, 1800, 25000,1000000, -5, 10))
limits = data.frame("var"=c("x", "y"), min=c(1,0), max=c(5,99999))

您可以使用 sweep带运算符的函数 '>''<'这很简单!
sweep(df, 2, limits[, 2], FUN='>') & sweep(df, 2, limits[, 3], FUN='<')
####          x     y
#### [1,]  TRUE  TRUE
#### [2,] FALSE  TRUE
#### [3,] FALSE FALSE
#### [4,]  TRUE FALSE
#### [5,] FALSE FALSE
#### [6,] FALSE  TRUE

TRUE 位置告诉您要为每个变量保留哪些观测值。
它应该适用于任意数量的变量

之后,如果您需要全局标志(至少是一列中的标志),您可以运行这个简单的行(res 是前一个输出)
apply(res, 1, all)
#### [1]  TRUE FALSE FALSE FALSE FALSE FALSE

关于r - 如何从数据框中删除超出变量特定范围的记录? [R],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976775/

相关文章:

python - 在 Sklearn 异常值检测方法中将 'contamination' 参数设置为 'auto' 有什么作用?

r - 在 PCA 图上测试聚类的显着性

r - 合并因子列的值

python - 如何在 Python 中对 IsolationForest 模型执行 "save"操作?

arrays - 删除近排序数组中的未排序/离群元素

r - 更改 geom_boxplot 中的 mustache 末端

sparse-matrix - 如何使用 ELKI 处理稀疏数据?

c++ - 在 Windows 上创建包含 C++ 的 R 包

r - ggplot 颜色 : changing order of colours, 的最佳可视化保持原始因子排序

r - 在 R 上计算基于五分位数的分数