从每个文件中删除第一行后合并CSV文件

时间:2017-06-16 23:08:36

标签: r csv dplyr

我在第一个不常见行的文件夹中有多个CSV文件。列名从第2行开始,这在所有CSV文件中都是通用的。我想删除每个CSV文件中的第一行并合并它。

代码:

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

1 个答案:

答案 0 :(得分:0)

我想我理解了这个问题:你滥用了管道%>%

首先,由于您使用dplyr管道链来创建变量df,因此您无法在管道中引用df。所以代码

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

注定要在第2步失败。

其次,管道内的任务df <- ...是不可能的,就像你完成它一样。我的解决方案是lapply一个函数,它从数据帧或tibble中删除第一行。

第三,管道步骤从左到右(或从上到下,您格式化代码的方式)。因此,在阅读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.filesread_csv和管道在一行代码中读取和清理一堆文件的方式。你只是在丢弃每个文件的第一行的部分犯了一个错误。