簡體   English   中英

R:在循環中讀取和寫入多個csv文件,然后使用原始名稱進行輸出

[英]R: Reading and writing multiple csv files into a loop then using original names for output

道歉,如果這看起來似乎很簡單,但是我在網站上的任何地方都找不到可行的答案。 我的數據采用csv格式,文件名是名稱和數字。 不像使用通用詞和增加數字的文件那樣簡單...我已經完全實現了我只想用一個文件做的事情,但是問題是有兩百個要做,所以每次更改名稱時間很繁瑣。

在此發布我的原始單批代碼,希望有人能夠緩解失敗搜索日益加劇的壓力。

# set workspace
getwd()
setwd(".../Desktop/R Workspace")


# bring in original file, skipping first four rows
Person_7<- read.csv("PersonRound7.csv", header=TRUE, skip=4)

# cut matrix down to 4 columns
Person7<- Person_7[,c(1,2,9,17)]

# give columns names
colnames(Person7) <- c("Time","Spare", "Distance","InPeriod")

# find the empty rows, create new subset. Take 3 rows away for empty lines.
nullrow <- (which(Person7$Spare == "Velocity"))-3
Person7 <- Person7[(1:nullrow), ]

#keep 3 needed columns from matrix
Person7<- Person7[,c(1,3,4)]
colnames(Person7) <- c("Time","Distance","InPeriod")

#convert distance and time columns to factors
options(digits=9)
Person7$Distance <- as.numeric(as.character(Person7$Distance))
Person7$Time <- as.numeric(as.character(Person7$Time))

#Create the differences column for distance
Person7$Diff <- c(0, diff(Person7$Distance))

...whole heap of other stuff...

#export Minutes to an external file
write.csv(Person7_maxs, ".../Desktop/GPS Minutes/Person7.csv")

因此,這三部分的問題如下:

  1. 我可以創建一個列表或向量來讀取文件名,但是每次都不能讀取每個數據幀(如果這樣做是一個很好的方法)。

  2. 整個代碼中的變量名將需要更改,而不僅僅是“ Person1”,“ Person2”,它們將更像“ Johnny1”,“ Lou23”。

  3. 需要使用原始名稱將每個結果數據幀導出到它自己的csv文件中。

采納所有建議-努力與此建議。 干杯!

考慮使用〜200個數據幀中的一個列表。 不需要單獨的命名對象泛洪全局環境(盡管list2env仍顯示在下面)。 因此,使用lapply()遍歷工作目錄的所有csv文件,然后將列表的每個元素簡單命名為file的基本名稱:

setwd(".../Desktop/R Workspace")

files <- list.files(path=getwd(), pattern=".csv")

# CREATE DATA FRAME LIST
dfList <- lapply(files, function(f) {
      df <- read.csv(f, header=TRUE, skip=4)
      df <- setNames(df[c(1,2,9,17)], c("Time","Spare","Distance","InPeriod"))

      # ...same code referencing temp variable, df

      write.csv(df_max, paste0(".../Desktop/GPS Minutes/", f))
      return(df)
})

# NAME EACH ELEMENT TO CORRESPONDING FILE'S BASENAME 
dfList <- setNames(dfList, gsub(".csv", "", files))

# REFERENCE A DATAFRAME WITH LIST INDEXING
str(dfList$PersonRound7)    # PRINT STRUCTURE
View(dfList$PersonRound7)   # VIEW DATA FRAME
dfList$PersonRound7$Time    # OUTPUT ONE COLUMN

# OUTPUT ALL DFS TO SEPARATE OBJECTS (THOUGH NOT NEEDED)
list2env(dfList, envir = .GlobalEnv)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM