我在第一个不常见行的文件夹中有多个CSV文件。列名从第2行开始,这在所有CSV文件中都是通用的。我想删除每个CSV文件中的第一行并合并它。
代码:
library(dplyr)
library(readr)
df <- list.files(full.names = TRUE) %>%
df<-df[-1] %>%
lapply(read_csv) %>%
bind_rows
答案 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.files
,read_csv
和管道在一行代码中读取和清理一堆文件的方式。你只是在丢弃每个文件的第一行的部分犯了一个错误。