2012-12-10 101 views
1

嗨計算器專家,sqldf語句刪除行語法錯誤?

我正嘗試使用sqldf刪除在AR表中的行像這樣:

structure(list(Similarity = c(999L, 888L, 756L, 879L, 567L, 567L), Peak = c(797L, 833L,999L, 798L, 834L, 444L), Formula = structure(c(4L,3L, 4L, 1L, 2L, 2L), .Label = c("C12H26S", "C16H19NO", "C2H8O2Si","C9H13NO2"), class = "factor")), .Names = c("Similarity", "Peak","Formula"), class = "data.frame", row.names = c(NA, -6L)) 

我的目標就是「SI」出現在類似的公式列刪除行這樣的:

structure(list(Similarity = c(999L, 756L, 879L, 567L, 567L), 
Peak = c(797L, 999L, 798L, 834L, 444L), Formula = structure(c(3L, 
3L, 1L, 2L, 2L), .Label = c("C12H26S", "C16H19NO", "C9H13NO2" 
), class = "factor")), .Names = c("Similarity", "Peak", "Formula" 
), class = "data.frame", row.names = c(NA, -5L)) 

我已經嘗試了sqldf聲明:

sqldf("DELETE * FROM PO_raw WHERE Formula='Si'") 

但是,當然,它沒有工作,因爲沒有隻有「Si」的行。我是一個sqldf初學者,在我看來,這可能是語法錯誤。我在網上搜索,但沒有找到任何例子。

有什麼建議嗎?這是甚至有可能與sqldf?

歡呼聲,

舊金山

回答

4

使用LIKE和通配符,像這樣:

> sqldf(c("DELETE FROM PO_raw WHERE Formula like '%Si'", "select * from main.PO_raw")) 
    Similarity Peak Formula 
1  999 797 C9H13NO2 
2  756 999 C9H13NO2 
3  879 798 C12H26S 
4  567 834 C16H19NO 
5  567 444 C16H19NO 

(BTW:有趣question about LIKE

+0

羅洛,感謝您的回答和建議, – Francisco

+0

羅洛,我已經嘗試了你的建議,但它出現的消息是 - sqliteExecStatement(con,statement,bind.data)中的錯誤: RS-DBI驅動程序:(錯誤語句:接近「*」:語法錯誤)。任何建議? – Francisco

+3

delete在它之後不會返回*,也不會返回任何內容,因此請按照修訂版本中顯示的select語句進行操作。 –