使用自定义函数的数据帧矢量过滤

时间:2013-11-14 16:41:08

标签: r data-structures

我需要根据当前行和整个数据框列的一些计算得到我的数据框的子集。我试图使用R的向量表示法根据自定义函数过滤掉不需要的行:

myDataFrame[customFn(myDataFrame$A, ????? <<here I need to reference not just the current value of myDataFrame$A, but the whole vector myDataFrame$A>> ),]

我的customFn有两个参数:一个数字和一个向量,它返回一个布尔值的向量。如何将整个列向量传递给函数?我不想使用apply,因为我认为它会比矢量过滤慢得多

谢谢!

1 个答案:

答案 0 :(得分:1)

正如@Justin指出的那样 - 只要customFn返回与数据帧长度相同的逻辑向量,你就可以了。例如

# Define a function to return a vector of logicals based on the mtcars$mpg
keepers <- function(d, lower=18, upper=20) {
  to_keep <- rep(TRUE, nrow(d))
  to_keep[(d$mpg < lower) | (d$mpg > upper)] <- FALSE
  to_keep # True if d$mpg is between upper and lower
}

mtcars[keepers(mtcars), ]