r - 创建csv文件列表,打开一个,遍历每一行,然后打开下一个并遍历每一行?
问题描述
我有多个具有相同列但行数不同的 csv 文件。对于每个 csv 列,我想获取 csv 文件的名称,打开它,获取文件的名称,然后根据“-”字符将一列分成两列。我对这个循环没有问题:
l <- list.files(".", full.names = TRUE)
for(i in length(l)){
#Get the sample name form the name of the sheet
nm <- gsub("C:/Users/jmartin/Documents/20181130_Butte_Dust/tracking_sheets/","",l[[i]])
nm <- gsub(".csv","",nm)
df <- read.csv(paste(l[i]), stringsAsFactors = FALSE)
df.sep <- separate(data = df, col = MyColumn, into = c("start", "stop"), sep = "\\-")
这是我不知道如何进行的地方。我想对data.frame“df.sep”中的每一行重复以下步骤,然后去获取下一个csv文件,重复第一个循环以生成一个新的“df.sep”,然后对每个执行以下步骤该data.frame的行。请注意,“nm”来自上面的循环,“n”是现有列表。
for(j in nrow(df.sep)){
new <- paste(nm, " ", df.sep[j,3], df.sep[j,6], sep="")
old <- paste("X", df.sep[j,8], sep="")
n[which(n == paste(old))] <- paste(new)
}
本质上,我需要使用多个 csv 文件的某些列来重命名列表中的元素。我怎样才能让这两个循环一起工作?我可以让第二部分替换 n 中的单个值,但一次不超过一个。
解决方案
我创建了一个框架代码来读取多个 csv 文件。您可以编辑 df.sep。我希望这有帮助。
# create a folder to save CSV files
myDirName = "folderCsv"
if(!dir.create(myDirName)){dir.create(myDirName)}
# loop to save files
set.seed(0)
maxNumFile = 2
for(ctFile in 1:maxNumFile){
# create data
numSample = 3
df = data.frame(
"col1" = paste0("X", floor(runif(n = numSample, min = 0, max = 10))),
"col2" = floor(runif(n = numSample, min = 0, max = 10))
)
write.csv(x = df, file = paste0(myDirName, "/df", ctFile, ".csv"))
}
# prepare a list to save df.sep
lsdf.sep = vector(mode = "list", length = maxNumFile)
# open the CSV files
for(ctFile in 1:maxNumFile){ # Many R users prefer lapply to this For method.
df.sep = read.csv(file = paste0(myDirName, "/df", ctFile, ".csv"), row.names = 1, stringsAsFactors = FALSE)
df.sep$col1[df.sep$col1 == "X8"] = "new8"
lsdf.sep[[ctFile]] = df.sep
}
lsdf.sep
# [[1]]
# col1 col2
# 1 new8 5
# 2 X2 9
# 3 X3 2
#
# [[2]]
# col1 col2
# 1 new8 6
# 2 X9 0
# 3 X6 2
推荐阅读
- python - Pdfminer 使用 LChar 获取文本坐标
- laravel - 使用 fetch (POST) 调用 laravel API,请求对象为空
- python - Pyarrow 数据集读取特定列和特定行
- angular - 多个选项卡的 SignalR 问题
- java - 字节扫描器没有正确比较,Java
- bash - Bash printf - 使用数组作为参数
- java - 我怎样才能设置一个
作为 main() 中的构造函数? - string - 在暂存缓冲区中打印长行
- kubernetes - Helm 条件模板
- java - Lombok:如何定义在 Object 构造上运行的特殊方法?