2017-02-07 3 views
2

私自身の関数内で、文字列をdplyrパッケージのfilter_関数への入力として渡す方法を探しています。私は、データフレームをフィルタリングする「りんご」や「バナナ」のいずれかを渡すことが可能な機能を書くための方法を探しています関数内で文字列をdplyrフィルタに渡すにはどうすればよいですか?

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

次のように私は、データフレームを設定しています。

私が試してみました:

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

は、次に値を渡す:

apple1 = filterFruit(df, "apple") 
apple1 

これがエラーをreturneなります

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)を決定する必要があります。

+1

'filter_(データ、ペースト( "X2 =="、フルーツ))'あなたは、文字列を構築するためのペーストを使用することができます。 – Psidom

+1

'filter(Data、X2 == as.character(Fruit))' – GGamba

+0

@ Rich Scriven間違ったタイミングでピックアップしていただきありがとうございました – Jamesm131

答えて

1

私はフルーツを得るためにwhichを使用しました。インデックスだけを取得するには、retValを使用します。

filterFruit <- function(Data, column, Fruit){ 
    idx <- Data[,column] 
    retVal <- which(idx == Fruit) 
    fruits_here <- Data[c(retVal), column] 
    return(fruits_here) 
} 
1

これはあなたの編集に答える必要があります。

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 
関連する問題