2017-02-23 79 views
0

創建多個CSV提取找遍了無數的Q &但不找到一個解決辦法對這個問題......(見下文未遂)的子集化的數據幀

我有一個交易數據集MAC_trans_sales_members其中每個事務分配到客戶ID,並分配給一個隊列的每個客戶,例如'01/2016'在join.cohort列中。有4M客戶,因此1個excel文件的行數太多,所以我想爲每個連接羣組創建單獨的子集,並將每個子集導出到單獨的csv。有大約18個隊列,所以我想自動化這個子集。

我曾嘗試下面的代碼位,但他們沒有工作:

嘗試1

dt <- MAC_trans_sales_members 
setDT(dt)[, fwrite(.SD, paste0("output_", join.cohort,".csv")), 
     by = join.cohort, .SDcols=names(dt) ] 

Error: is.character(file) && length(file) == 1 && !is.na(file) is not TRUE 

嘗試2

setDT(MAC_trans_sales_members)[, write.csv(.SD, paste0("output_", join.cohort,".csv")), 
by = join.cohort, .SDcols=names(MAC_trans_sales_members) ] 

Error in file(file, ifelse(append, "a", "w")) : 
invalid 'description' argument 
In addition: Warning message: 
In if (file == "") file <- stdout() else if (is.character(file)) { : 
the condition has length > 1 and only the first element will be used 

嘗試3

daply(MAC_trans_sales_members, .(join.cohort), write.csv) 

......只是噴出了林es控制檯中的數據

我在做什麼錯?

回答

1

join.cohort是代碼中的j中的一個向量。使用unique

MAC_trans_sales_members[, 
    fwrite(.SD, paste0("output_", unique(join.cohort), ".csv")), 
    by=join.cohort] 

你嘗試3,file參數write.csv不通過

+0

謝謝 - 已做出的更改,加入'unique',但我現在仍然收到錯誤消息: (.SD,paste0(「output_」,unique(join.cohort),「.csv」)): 沒有這樣的文件或目錄:'output_02/2016.csv'。無法創建新文件進行寫入(它不存在)。你有沒有寫在這裏的權限,磁盤上是否有空間,路徑是否存在?' 有什麼想法? – Adam

+0

文件路徑output_02/2016.csv必須存在才能起作用。檢查文件夾output_02是否在你的工作目錄中,你可以使用'getwd()'來檢查' – chinsoon12

+0

Thanks - 「join.cohort」中的變量格式爲01/2016,02/2016等,所以輸出代碼是以「/」作爲文件夾級別。我將「/」重寫爲「 - 」,現在它可以很好地輸出,而且非常快! – Adam