我在R中汇总了一堆CSV文件,我已成功使用以下代码(找到here):
Tbl <- list.files(path = "./Data/CSVs/",
pattern="*.csv",
full.names = T) %>%
map_df(~read_csv(., col_types = cols(.default = "c")))
我希望将.csv文件名(理想情况下没有文件扩展名)包含在Tbl中的列中。我找到了一个使用plyr的解决方案,但是我想坚持使用dplyr,因为plyr会导致我的代码进一步下滑。
有什么方法可以在上面的代码中添加一些东西,告诉R在Tbl $ filename中包含文件名吗?
非常感谢!
答案 0 :(得分:4)
这是我的解决方案。如果这有帮助,请告诉我。
Tbl <- list.files(path = "./Data/CSVs/",
pattern="*.csv",
full.names = T) %>%
map_df(function(x) read_csv(x, col_types = cols(.default = "c")) %>% mutate(filename=gsub(".csv","",basename(x))))
答案 1 :(得分:0)
由于.csv中的数据格式不清楚,因此很难准确了解您的需求。但请尝试gsub
。假设您有Tbl.list中的文件列表:
library(dplyr)
Tbl.list <- list.files(path = "./Data/CSVs/",
pattern="*.csv",
full.names = T)
转换为data.frame,然后使用“”修改文件名“.csv”:
Tbl.df <- data.frame( X1 = Tbl.list ) %>%
mutate( filename_wo_ext = gsub( ".csv", "", X1 ) )
您也可以尝试以下方法,但我不确定它是否有效。 (我们假设你还有Tbl.list
)。首先更改map_df语句以添加index
列:
map_df(~ read_csv(., col_types = cols(.default = "c")),
.id="index") %>%
mutate( gsub( ".csv", "", Tbl.list[as.numeric(index)] )
列index
应包含字符向量[1 ... n]。 mutate
语句将在Tbl.list中查找,在index
抓取文件名,并使用“”将“.csv”分出。