【发布时间】:2019-10-25 02:44:40
【问题描述】:
这个问题在某种程度上是我之前提出的问题Combining data based on user input in R 的延续。建议将我的数据存储在列表中,而不是作为全局环境中的单个项目。因此,我试图将所有类似的文件类型(例如 .csv)导入列表列表。每个嵌套列表代表多个时间序列 .csv 文件之一。这目前使用以下代码工作:
ImportData <- function(mypattern,...)
{
mypattern <- readline(prompt = "Enter File Type:")
temp <- list.files(".", pattern=mypattern)
myfiles <- lapply(temp, fread, skip = 1)
names(myfiles) <- gsub("-.*", "", temp)
header <- c("index","DateTime", "Voltage")
myfiles <<- lapply(myfiles, setNames, header)
}
ImportData()
下一步是合并具有相似名称的时间序列数据列表,这些数据代表来自同一站点的数据。运行上述函数后,myfiles 包含名称如 ASW1.csv、ASW1_10Sept.csv、ASW1_2017 以及其他具有不同缩写(例如 CSW)的列表。我使用以下功能的目标是提示用户输入站点名称(例如 ASW1),并将 myfiles 列表中名称包含 ASW1 的每个列表组合并按日期排序到 @ 中称为 ASW1 的新列表中987654325@。然后用户可以调用来自特定站点的所有数据。
CombineData <- function()
{
Site <- invisible(readline(prompt = "Enter Site Name:"))
myfiles[[Site]] <<- rbindlist(mget(apropos(Site), inherits = TRUE))
}
CombineData()
我遇到的问题是在运行CombineData 时,一个空列表被添加到myfiles,而不是一个包含来自任何列表中的所有数据的列表,名称在Site 中提供。我可以手动组合列表:
ASW1 <- myfiles[c(1,2,3,4)]
ASW1 <- rbindlist(ASW1)
但我的目标是让这个过程尽可能自动化。在我的代码的早期版本中,我使用以下内容来获取包含特定名称 do.call(rbind, mget(ls(pattern = "^ASW1"))) 的所有内容,但显然在使用列表时必须有所不同。
【问题讨论】:
-
嗨,bmdanhof。您对以下答案的理解如何?
:-)
标签: r