我有一个数据帧和一个预测模型,我想应用于数据.但是,我想过滤掉模型可能不适用的记录.为此,我有另一个数据帧,其中包含每个变量在训练数据中观察到的最小值和最大值.我想从我的新数据中删除那些一个或多个值超出指定范围的记录.
为了使我的问题清楚,这就是我的数据可能是这样的:
id x y
---- ---- ---------
1 2 30521
2 -1 1835
3 5 25939
4 4 1000000
Run Code Online (Sandbox Code Playgroud)
这是我的第二张桌子,包括分钟和最大值,看起来像:
var min max
----- ----- -------
x 1 5
y 0 99999
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想在我的数据中标记以下记录: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))
Run Code Online (Sandbox Code Playgroud)
您可以将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
Run Code Online (Sandbox Code Playgroud)
TRUE 位置告诉您要为每个变量保留哪些观察结果。它应该适用于任意数量的变量
之后,如果您需要全局标志(至少在一列中的标志),您可以运行这个简单的行(res 是之前的输出)
apply(res, 1, all)
#### [1] TRUE FALSE FALSE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |