我有一个数据框和一个我想应用于数据的预测模型。但是,我想过滤掉模型可能不太适用的记录。为此,我有另一个数据框,其中包含训练数据中观察到的每个变量的最小值和最大值。我想从我的新数据中删除那些一个或多个值超出指定范围的记录。
为了让我的问题更清楚,这就是我的数据可能的样子:
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/