2017-06-16 158 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