2017-05-02 4 views
0

私は、ユーザ入力パラメータを受け入れ、それに従って適切なものを生成するプロセスを構築しようとしています。'Macro Variables' in R

は私のことができるようにする必要があります。

以下の作品は、私がやりたいことのために働く
1. Input a variable 
2. Pull max date for that variable 
3. Pull all data less than or equal to that date 

dates <- c('2001-01-08', '2015-01-07', '2013-03-03', '2001-01-01', '2013-07-25', '2000-09-20', '2017-02-20') 
groups <- c('A', 'A', 'A', 'B', 'B', 'C', 'D') 

dat <- data.frame(groups, dates) 

dat$dates <- as.Date(dat$dates) 

....

querydate <- sqldf(
    "SELECT max(dates) as x 
    FROM dat 
    WHERE groups == 'A'") 

しかし、私はこのような何かをするために、これを編集したいです....値を指定して参照を指定する場所

group_i_want <- 'A' 

querydate <- sqldf(
    "SELECT max(dates) as x 
    FROM dat 
    WHERE groups == group_i_want") 

この値を認識させるにはどうすればよいですか?

+3

このような単純なタスクに 'sqldf'を使用しないでください。むしろ、ネイティブRでそれを行う方法を学びます。例えば、あなたの望む結果は 'max(dat $ dates [dat $ groups == group_i_want])'で得ることができます。 – nicola

+3

^複数のグループに対して '=='の代わりに '%in%'を使用 – Sotos

+0

貼り付けを試したら? –

答えて

1

sprintfを使用すると、実行時に収集する値に対して文字列フォーマットを行うことができます。例:ここでは%s

g <- "A" 
if (invalid.input(g)) stop("Error") # Make sure input was valid 
query <- sprintf("SELECT max(dates) as x FROM dat WHERE groups == '%s'", g) 
querydate <- sqldf(query) 

gに含まれる文字列によって置き換えられます。また、数字を特定の書式で置き換えることもできます。詳しくは、 ?sprintfをご覧ください。