r - 使用 read.csv 保存文件路径
问题描述
我正在使用以下方法加载一堆 csv:
data_path_list <- list.files(path = getwd(), recursive = T, pattern = "\\QVDR.csv", full.names = T)
data <- do.call(rbind, lapply(data_path_list, function(x) {
read.csv(x, skip = 3)
})) %>%
mutate(
Source = data_path_list
)
我正在使用 Source 列来尝试保留加载该特定文件的路径,但它不起作用。
解决方案
如果您使用dplyr
( mutate
),那么我强烈建议您使用bind_rows
代替do.call(rbind, ...)
. 一个很好的好处是它可以分配一个id
字段:
# setup
write.csv(mtcars[1:3,], file="mt.csv")
file.copy("mt.csv", "mt2.csv")
library(dplyr)
rawdat <- sapply(list.files(pattern = "mt.*\\.csv", full.names = TRUE), read.csv, simplify = FALSE)
names(rawdat)
# [1] "./mt.csv" "./mt2.csv"
bind_rows(rawdat, .id = "id")
# id X mpg cyl disp hp drat wt qsec vs am gear carb
# 1 ./mt.csv Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# 2 ./mt.csv Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# 3 ./mt.csv Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
# 4 ./mt2.csv Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# 5 ./mt2.csv Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# 6 ./mt2.csv Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
sapply(vec, fun, simplify=FALSE)
注意:和之间的一个区别lapply(vec, fun)
是,如果vec
未命名,sapply
将有效地将其值分配为名称names(vec) <- vec
;lapply
将不会。lapply
使用with可以获得相同的效果setNames(lapply(vec, fun), vec)
。
推荐阅读
- tomcat - 与 7.21.5 捆绑的 tomcat 中的错误
- reactjs - JSX 元素类型“SubscribeCard”没有任何构造或调用签名
- java - 将数据框的架构与其他数据框的架构进行比较
- sql - 如何从外键插入多个数据?
- python - 基维蟒蛇 | 定位文本输入
- snowflake-cloud-data-platform - 如何加快 SnowSQL 文件从本地到内部阶段的导入
- python - 使用 pytest skipif 检查服务器的内存大小
- python - 提交订单并重定向到单个平台
- python - 使用 Flask 的增量作业队列(获取部分结果)
- json - json 日志格式的流利位解析器问题