Создать список CSV-файлов, открыть один, пройти по каждой строке, затем открыть следующую и пройти по каждой строке? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть несколько 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 голосов
/ 27 декабря 2018

Я создал скелетный код для чтения нескольких 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...