r - 如何删除文件夹中多个 csv 文件中的某些列?
问题描述
如何在 R 中导入多个 CSV 文件(15000 个 CSV 文件)并删除每个文件中的某些列并保存?
解决方案
您可以自动化读取-操作-写入方法。
说,您的.csv位于您的工作目录中。
ldir <- getwd()
将他们的名字存储在一个向量中。
## list names
nm <- paste0(ldir, dir(pattern="tab\\d")) ## list names
nm <- paste0(ldir, c("tab1.csv", "tab2.csv", "tab3.csv", "tab4.csv")) ## or hard coded
首先让我们检查示例.csv的头部。
## inspect head of each .csv
lapply(nm, function(i) head(read.csv(i), 3))
# [[1]]
# X1 X2 X3 X4
# 1 1.3709584 1.304870 -0.3066386 0.4554501
# 2 -0.5646982 2.286645 -1.7813084 0.7048373
# 3 0.3631284 -1.388861 -0.1719174 1.0351035
#
# [[2]]
# X1 X2 X3 X4
# 1 0.2059986 0.3219253 -0.3672346 -1.04311894
# 2 -0.3610573 -0.7838389 0.1852306 -0.09018639
# 3 0.7581632 1.5757275 0.5818237 0.62351816
#
# [[3]]
# X1 X2 X3 X4
# 1 1.51270701 1.3921164 1.200965 -0.02509255
# 2 0.25792144 -0.4761739 1.044751 0.10807273
# 3 0.08844023 0.6503486 -1.003209 -0.48543524
#
# [[4]]
# X1 X2 X3 X4
# 1 -1.4936251 5.676206e-01 -0.0861073 -0.04069848
# 2 -1.4704357 -4.928774e-01 -0.8876790 -1.55154482
# 3 0.1247024 6.288407e-05 -0.4446840 1.16716955
然后,将要删除的列名放入另一个向量中。
## select columns to delete
to.del <- c("X2", "X4")
最后,我们使用mapply
对两个向量进行多元循环。在 FUN 中,有两个版本write.csv
,一个覆盖原始.csv,一个复制。
## read, delete, and write back
mapply(function(x, y) {
r <- read.csv(x)
# write.csv(r[, !names(r) %in% y], row.names=FALSE, file=x) ## use to override
write.csv(r[, !names(r) %in% y], row.names=FALSE,
file=paste0(dirname(x), "copy_of_", basename(x))) ## use for copy
}, nm, list(to.del))
让我们检查一下,是否一切都按预期工作。
## check result
lapply(paste0(dirname(nm), "copy_of_", basename(nm)), function(i)
head(read.csv(i), 3))
# [[1]]
# X1 X3
# 1 1.3709584 -0.3066386
# 2 -0.5646982 -1.7813084
# 3 0.3631284 -0.1719174
#
# [[2]]
# X1 X3
# 1 0.2059986 -0.3672346
# 2 -0.3610573 0.1852306
# 3 0.7581632 0.5818237
#
# [[3]]
# X1 X3
# 1 1.51270701 1.200965
# 2 0.25792144 1.044751
# 3 0.08844023 -1.003209
#
# [[4]]
# X1 X3
# 1 -1.4936251 -0.0861073
# 2 -1.4704357 -0.8876790
# 3 0.1247024 -0.4446840
是的。
示例数据:
## generate example .csvs in wd
set.seed(42)
sapply(1:4, function(i) write.csv(data.frame(matrix(rnorm(10*4), 10, 4)),
row.names=FALSE, file=paste0("tab", i, ".csv")))
推荐阅读
- c++ - 有没有办法将任何重载函数包装到函数对象中?
- javascript - 从数组中提取数据并存储为 json
- azure - 在 Azure 数据工厂中拆分数据流中的列值
- json - 从 JSON 生成值的输出并按数字对它们进行排序
- recaptcha - Recaptcha 和 Recaptcha 企业定价
- python-3.x - 带有库pymssql的Python无法双击运行脚本
- user-interface - iced:如何全屏创建窗口?
- powershell - 为 AD 用户创建新的 Profilepath
- uncrustify - 删除“} break;”中的空格 和“案例 x:{”
- reactjs - Jest Mock 3rd 方 TS 模块 - 模拟时出现“找不到模块”错误