道歉,如果这看似简单,但我无法在网站的任何地方找到可行的答案。 我的数据是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")
所以三部分问题如下:
我可以创建一个列表或向量来读取文件名,但不是每次都读取一个数据帧(如果这是一个很好的方法)。
整个代码中的变量名称需要更改而不仅仅是“Person1”“Person2”,它们更像是“Johnny1”“Lou23”。
需要将每个结果数据框导出到自己的原始名称的csv文件中。
采取任何和所有建议 - s.t.ruggling与这一个。 干杯!
答案 0 :(得分:1)
考虑使用~200个数据帧的一个列表。不需要单独的命名对象充斥全局环境(尽管下面仍显示list2env
)。因此,使用lapply()
遍历工作目录的所有csv文件,然后只需将list的每个元素命名为file的basename:
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)