创建CSV文件列表,打开一个文件,在每一行中循环,然后打开下一个文件,并在每一行中循环?

时间:2018-12-26 18:43:57

标签: r

我有多个具有相同列但行数不同的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中的单个值,但一次不超过一个。

1 个答案:

答案 0 :(得分:2)

我创建了一个框架代码来读取多个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