我有一个文件夹中的第一个不常见的行中的多个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