如何过滤此数据框?

时间:2016-12-22 21:17:14

标签: r

我有一个数据框,我想过滤它:

employee <- c('John Doe','Peter Gynn','Jolie Hope', 'Michael')
salary <- c(21000, 23400, 26800, 25000)
number <- c(1,2,3,5)
df <- data.frame(employee,salary,number)

> df
    employee salary number
1   John Doe  21000      1
2 Peter Gynn  23400      2
3 Jolie Hope  26800      3
4    Michael  25000      5

我也有这些载体:

vectorMin <- c(22000,1.5)
vectorMax <- c(26000,4.5)

我希望使用22000到26000之间的工资和1.5到4.5之间的数字来过滤数据框。在这种情况下,我希望数据框只有Peter Gynn。我试过了:

(df >= vectorMin) & (df <= vectorMax)

但这不起作用。我该怎么办?

3 个答案:

答案 0 :(得分:5)

您可以使用Map对矢量/列表元素执行一对一操作。然后我们可以将结果与Reduce结合起来。首先,我们定义一个函数between(为包含问题的特定需求而编写),它返回相关范围内值的逻辑向量。您也可以在Map中使用匿名函数。

between <- function(x, min, max) x >= min & x <= max

df[Reduce("&", Map(between, df[-1], vectorMin, vectorMax)), ]
#     employee salary number
# 2 Peter Gynn  23400      2

答案 1 :(得分:3)

vectorMin <- c(22000,1.5)
vectorMax <- c(26000,4.5)

df[df$salary > vectorMin[1] & df$salary < vectorMax[1]
   & df$number > vectorMin[2] & df$number < vectorMax[2],]

答案 2 :(得分:0)

使用强大的dplyr包很容易实现:

library(dplyr)
df %>%
  filter(salary >= 22000, salary <= 26000, number >= 1.5, number <= 4.5)
# 1 Peter Gynn  23400      2