如何将字符串传递给函数中的 dplyr 过滤器?
How to pass a string to dplyr filter in a function?
我正在寻找一种方法,将字符串作为输入传递给我自己的函数中 dplyr 包中的 filter_
函数。我已将数据框设置如下:
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)。
我已经用which
获得了水果。要仅获取索引,您可以使用 retVal
。
filterFruit <- function(Data, column, Fruit){
idx <- Data[,column]
retVal <- which(idx == Fruit)
fruits_here <- Data[c(retVal), column]
return(fruits_here)
}
这应该回答您的编辑:
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
我正在寻找一种方法,将字符串作为输入传递给我自己的函数中 dplyr 包中的 filter_
函数。我已将数据框设置如下:
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)。
我已经用which
获得了水果。要仅获取索引,您可以使用 retVal
。
filterFruit <- function(Data, column, Fruit){
idx <- Data[,column]
retVal <- which(idx == Fruit)
fruits_here <- Data[c(retVal), column]
return(fruits_here)
}
这应该回答您的编辑:
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