2017-06-16 156 views
-1

我有一個文件夾中的第一個不常見的行中的多個CSV文件。列名從所有CSV文件中通用的第二行開始。我試圖從每個CSV文件中刪除第一行併合並它。刪除每個文件的第一行後合併CSV文件

代碼:

library(dplyr) 
    library(readr) 
    df <- list.files(full.names = TRUE) %>% 
    df<-df[-1] %>% 
    lapply(read_csv) %>% 
    bind_rows 
+0

指定你正在遇到的具體問題。 – SandPiper

回答

0

我想我明白這個問題:你是濫用管%>%

首先,由於您正在使用dplyr管道鏈創建變量df,因此您不能在管道內引用df。因此,代碼

df <- step1.do_something() %>% step2.do_something_with_df() %>% step3.etc() 

註定要在步驟2失敗

其次,它是不可能有管道內的分配df <- ...,站在自己的你已經做的方式。我的解決方案是lapply一個函數,它可以從數據幀或粗體中刪除第一行。

第三,管道的步驟從左到右(或從上到下,就是您對代碼進行格式化的方式)。因此,您需要在閱讀csv文件後執行第一行的第一行。

最後,您從數據幀dd = d[-1,]而不是d = d[-1]中刪除一行。

所以,你現在要做的應該是這樣的:

df <- list.files(full.names = TRUE) %>% 
    lapply(read_csv) %>% 
    lapply(function(d) d[-1,]) %>% 
    bind_rows 

我真的很喜歡你使用list.filesread_csv的方式,閱讀和清理一堆文件中的一行代碼管。你只是在放棄每個文件的第一行的地方犯了一個錯誤。

+1

可以在read_csv中使用'skip = 1'選項來刪除第二個'lapply'調用:'df < - list.files(full.names = TRUE)%> lapply(function(x){read_csv(x ,skip = 1)})%>% bind_rows' – Dave2e

+0

更好,@ Dave2e! – lebelinoz