0

R で sqldf パッケージを使用しています。学生の ID が別のデータセットから除外されているデータセットを作成したいと考えています。私のコードは次のようになります:

delete <- sqldf("select distinct ID from A where ...") 
B<-sqldf("select * from A where ID not in ('select ID from delete')")

コードを実行した後、B は A とまったく同じであることがわかりました。sqldf はネストされた select ステートメントを認識していないようです。任意の提案をいただければ幸いです!

4

1 に答える 1

3

コードには次の問題があります。

  1. 示されているコードには、ネストされた select は実際にはまったくありません。このステートメントは、string と等しくないすべての ID を要求しています'select ID from delete'。引用符を削除します。

  2. deleteは SQLite キーワードです。data.frame に別の名前を使用するか、名前deleteを SQL ステートメント内で引用符で囲んで、キーワードとして扱わないようにします。

  3. 次回は、再現可能な形式で質問を述べてください。再現可能な優れた R の例を作成する方法を参照してください。

これら 3 つの変更を行うと、次のようになります。ここで、A の ID は 1、2、3、4、delete の ID は 1、2、B の ID は 3、4 です。

library(sqldf)    
A <- data.frame(ID = c(1, 1, 2, 3, 4))

delete <- sqldf("select distinct ID from A where ID < 3")
B <- sqldf("select * from A where ID not in (select ID from 'delete')")
于 2013-05-30T10:14:12.370 に答える