尽管大量的研究和使用lapply
(我认为/希望这是正确的apply
函数)的几个努力,我一直无法实现以下,并希望一些指导。我想要做的是读取单个目录中的所有文件,将它们全部合并到一个数据框中,确保每个文件在合并之前删除前七行。如何将函数应用于特定目录中的一组.csv文件?
(请注意,所有文件都包含相同的列标题,并包含相同的数据类型。)
我已经试过这一点,但它显然达不到的一切我想要实现:
files <- list.files(pattern = "*.csv") # Gather a list of everything in the directory that is a .csv file.
aconex <- lapply(files, fread) # Use lapply (I think this is correct) to apply the fread() function (from the data.table package) to each .csv file
这导致所有内容都存储在向量中,而我希望输出成为数据帧。
必须有更好的方法 - 我似乎无法弄清楚。
任何人都可以提出更好的解决方案吗?
UPDATE:
另外,我已经写了for
环路部分达到我想要的东西;问题是,它不仅节省了数据的单个文件的价值,以数据帧(总共有15个文件):
for(x in list.files(pattern = "*.csv")){
df <- data.table::fread(x)
df <- df[-(1:7), ]
colnames(df) <- as.character(unlist(df[1,]))
df <- df[-(1), ]
}
一旦前七行已被删除,我再申请的第一行作为列名称,然后删除第一行。再一次,有什么更好的方法来实现这一目标?
理想情况下,我想结果输出到数据帧或者是X-数(df1
,df2
,..,dfX
),然后我可以合并的,但同样,必须有一个更好的方式 - 是什么是吗?
简而言之,我希望每个文件都被读入自己的数据框中,然后将row 8
的值用作列标题,然后删除前八行(我只保留第八行以便在删除它之前将它用于列标题)。
取决于你想要做什么...'list_files <-list.files(模式(list_files,fread,skip = 7,header = T) result_dataframe <-do.call(list_result,“cbind”)'或'list_files <-list.files(pattern =“* .csv”)list_result < “* .csv”)list_result <-lapply(list_files,fread,skip = 7,header = T) result_dataframe <-rbindlist(list_results) – user3293236