2017-04-09 8 views
-1

This is related to the question that I posted earlier.我相信在R中不使用sql的情況下,必須有更好的方法來執行此操作。因爲sql無法識別R中的變量,所以它給了我一些目前的錯誤。這可能是由於語法錯誤。 SQL錯誤很明顯,因爲那些列不在df0中。需要有一種方法可以將文件名注入到選定的行中。爲什麼R不能讀取2個以上的文件?將ASCII讀入表中,並從表中選擇特定的行R

任何人都可以指出根源並提出一些更好的解決方案的想法?

> df <- NULL 
> fn <- NULL 
> n <- 1 
> for (f in files) { 
+  fn <- file_path_sans_ext(f) 
+  df0 <-read.table(f, sep=",") 
+  n <- n + 1 
+  df <- sqldf('select n, fn, V1, V2 from df0 
where V1 IN (101, 201, 301, 401)') 
-- thought R could read fn just as df0 
+  df <- rbind(df) --further fn and n only reads two files out of 1000s 
+ } 
Error in rsqlite_send_query([email protected], statement) : 
no such column: n, df1 
+0

張貼到SO的r標籤的代碼必須是最小的完整和可重複的,以便其他人可以將其複製到其會話中以運行它。 –

+0

@ G.Grothendieck我不太喜歡你。你可以看到這個標籤很新。這是一個新的慣例還是僅僅用於R?你能指出什麼是「最小的完整和可重複的」嗎?某種程度上,用戶的/ dev的代碼是不是特定於其目的? – bonCodigo

+0

http://stackoverflow.com/help/mcve –

回答

0

sqldf創建從工作區,以便它臨時數據庫和上傳數據幀(未標量或其它對象)。如果你想合併標量,那麼你可以使用gsubfn包中的fn(sqldf包自動加載)將它們注入到你的SQL語句中。例如,使用內置的BOD data.frame:

library(sqldf) 

n <- nrow(BOD) 
s <- "abc" 

fn$sqldf("select $n as n, '$s' as string, demand from BOD") 

,並提供:

n string demand 
1 6 abc 8.3 
2 6 abc 10.3 
3 6 abc 19.0 
4 6 abc 16.0 
5 6 abc 15.6 
6 6 abc 19.8 

建議你閱讀?sqldf?fn並辦理例子在sqldf github home page,因爲這一切都是有據可查的。

+0

如上所述,我不想在R中使用sql。過去我有足夠的sql份額。另外對於其他用戶(不熟悉sql和db)的好處,首選項僅限於R.你能否建議一種替代方案來實現同樣的功能而不使用sql? – bonCodigo

相關問題