我有一個文件夾中的第一個不常見的行中的多個CSV文件。列名從所有CSV文件中通用的第二行開始。我試圖從每個CSV文件中刪除第一行併合並它。刪除每個文件的第一行後合併CSV文件
代碼:
library(dplyr)
library(readr)
df <- list.files(full.names = TRUE) %>%
df<-df[-1] %>%
lapply(read_csv) %>%
bind_rows
我有一個文件夾中的第一個不常見的行中的多個CSV文件。列名從所有CSV文件中通用的第二行開始。我試圖從每個CSV文件中刪除第一行併合並它。刪除每個文件的第一行後合併CSV文件
代碼:
library(dplyr)
library(readr)
df <- list.files(full.names = TRUE) %>%
df<-df[-1] %>%
lapply(read_csv) %>%
bind_rows
我想我明白這個問題:你是濫用管%>%
。
首先,由於您正在使用dplyr
管道鏈創建變量df
,因此您不能在管道內引用df
。因此,代碼
df <- step1.do_something() %>% step2.do_something_with_df() %>% step3.etc()
註定要在步驟2失敗
其次,它是不可能有管道內的分配df <- ...
,站在自己的你已經做的方式。我的解決方案是lapply
一個函數,它可以從數據幀或粗體中刪除第一行。
第三,管道的步驟從左到右(或從上到下,就是您對代碼進行格式化的方式)。因此,您需要在閱讀csv文件後執行第一行的第一行。
最後,您從數據幀d
與d = d[-1,]
而不是d = d[-1]
中刪除一行。
所以,你現在要做的應該是這樣的:
df <- list.files(full.names = TRUE) %>%
lapply(read_csv) %>%
lapply(function(d) d[-1,]) %>%
bind_rows
我真的很喜歡你使用list.files
,read_csv
的方式,閱讀和清理一堆文件中的一行代碼管。你只是在放棄每個文件的第一行的地方犯了一個錯誤。
指定你正在遇到的具體問題。 – SandPiper