Jam*_*131 5 r dplyr standard-evaluation
我正在寻找一种将字符串作为输入传递给filter_我自己的函数中dplyr包中的函数的方法。我将数据框设置如下:
df = data.frame(
X1 = LETTERS[1:5],
X2 = c("apple", "apple", "apple", "banana", "banana")
)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种编写函数的方法,在该函数中我可以传递“苹果”或“香蕉”来过滤数据帧。
我试过了:
filterFruit = function(Data, Fruit){
retVal = filter_(Data, "X2 == Fruit")
return(retVal)
}
Run Code Online (Sandbox Code Playgroud)
然后传递值:
apple1 = filterFruit(df, "apple")
apple1
Run Code Online (Sandbox Code Playgroud)
这将返回一个错误:
Error: object 'Fruit' not found
Run Code Online (Sandbox Code Playgroud)
我尝试了其他几种方法,但均未成功,希望有人能提供帮助。
编辑:
我已经意识到我不需要为此操作使用filter_,因为我没有选择我要过滤的列,而可以将参数传递到没有引号的filter中。但是,问题仍然代表您遇到的情况:
df = data.frame(
X1 = LETTERS[1:5],
X2 = c("apple", "apple", "apple", "banana", "banana")
X3 = c("apple", "banana", "apple", banana", "apple")
)
Run Code Online (Sandbox Code Playgroud)
并且需要确定您要作为过滤依据的列(X2或X3)。
这应该回答您的编辑:
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
Run Code Online (Sandbox Code Playgroud)