6

我正在寻找一种方法将字符串作为输入传递给filter_我自己的函数中 dplyr 包中的函数。我已按如下方式设置数据框:

df = data.frame(
    X1 = LETTERS[1:5], 
    X2 = c("apple", "apple", "apple", "banana", "banana")
)

我正在寻找一种方法来编写一个函数,在该函数中我可以传递“apple”或“banana”来过滤数据框。

我努力了:

filterFruit = function(Data, Fruit){
   retVal = filter_(Data, "X2 == Fruit")
   return(retVal)
}

然后传递值:

apple1 = filterFruit(df, "apple")
apple1

这将返回一个错误:

Error: object 'Fruit' not found

我尝试了其他几种方法都没有成功,希望有人能提供帮助。

编辑:

我已经意识到我不需要为此操作使用 filter_ ,因为我没有选择要过滤的列,并且可以将参数传递给不带引号的过滤器。但是,对于您遇到的情况,问题仍然存在:

df = data.frame(
    X1 = LETTERS[1:5], 
    X2 = c("apple", "apple", "apple", "banana", "banana")
    X3 = c("apple", "banana", "apple", banana", "apple")
)

并且需要决定您需要过滤的列(X2 或 X3)。

4

2 回答 2

5

这应该回答您的编辑:

library(dplyr)

df = data.frame(
  X1 = LETTERS[1:5], 
  X2 = c("apple", "apple", "apple", "banana", "banana"),
  X3 = c("apple", "banana", "apple", "banana", "apple"), 
  stringsAsFactors=FALSE
)

column_string = "X2"
column_value = "banana"
column_name <- rlang::sym(column_string)

filtered_df <- df %>%
  filter(UQ(column_name) == UQ(column_value))

filtered_df
于 2017-09-27T02:31:24.707 回答
1

我已经习惯which了买水果。要仅获取索引,您可以使用retVal.

filterFruit <-  function(Data, column, Fruit){
  idx <- Data[,column]
  retVal <-  which(idx == Fruit)
  fruits_here <- Data[c(retVal), column]
  return(fruits_here)
}
于 2017-02-08T00:27:03.277 回答