在R中组合具有相似名称的嵌套列表项
这个问题在某种程度上延续了我先前提出的一个问题。建议将我的数据存储在列表中,而不是作为全局环境中的单个项目。因此,我正在尝试将所有类似的文件类型(如csv)导入列表列表中。每个嵌套列表表示多个时间序列.csv文件中的一个。目前使用以下代码执行此操作:在R中组合具有相似名称的嵌套列表项,r,R,这个问题在某种程度上延续了我先前提出的一个问题。建议将我的数据存储在列表中,而不是作为全局环境中的单个项目。因此,我正在尝试将所有类似的文件类型(如csv)导入列表列表中。每个嵌套列表表示多个时间序列.csv文件中的一个。目前使用以下代码执行此操作: ImportData <- function(mypattern,...) { mypattern <- readline(prompt = "Enter File Type:") temp <- list.files("
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()
我遇到的问题是,在运行CombineData
时,会将一个空列表添加到myfiles
中,而不是一个包含任何列表中所有数据的列表,其名称在站点中提供。我可以手动组合列表:
ASW1 <- myfiles[c(1,2,3,4)]
ASW1 <- rbindlist(ASW1)
ASW1以下方法是否解决了您的问题:
library(dplyr)
reqdNames = names(mylist)[grepl("asw",names(mylist))]
finalDf = bind_rows(mylist[reqdNames])
我可能误解了这个问题。让我知道它是否有效。我想我明白你想做什么。
尝试使用需要数据参数且在函数执行时返回数据的函数
而不是让函数在全局环境中操作数据
以下是一个例子:
MakeData <- function(abrr = 'ASW',nfiles = 10){
for(i in 1:nfiles){
lst <- list(a = 1:10,
b = rnorm(10)>0,
c = sample(LETTERS,10))
write.csv(lst,paste0("test_",abrr,i,".csv"))
}
}
ImportData <- function(mypattern)
{
temp <- list.files(".", pattern=mypattern)
myfiles <- lapply(temp, read.csv)
names(myfiles) <- gsub("-.*", "", temp)
myfiles
}
CombineData <- function(datalst,get = 'a')
{
lst <- lapply(datalst, function(x) x[[get]])
do.call(rbind, lst)
}
set.seed(314)
MakeData("ASW")
impdat <- ImportData("ASW")
CombineData(impdat,'b')
或者使用tidyverse
在管道中加载和处理数据,就像我喜欢做的那样:
require(tidyverse)
data.frame(filename = list.files(".", pattern = "ASW"), stringsAsFactors = F) %>%
mutate(lst = map(filename,~read.csv(.x)),
dat = map(lst, ~as.data.frame(t(.x[['b']])))) %>%
select(filename,dat) %>%
unnest()
嗨,丹霍夫。下面的答案你做得怎么样<代码>:-)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
test_ASW1.csv FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE
test_ASW10.csv FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE
test_ASW2.csv TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE
test_ASW3.csv FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE
test_ASW4.csv FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE
test_ASW5.csv TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE
test_ASW6.csv TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE
test_ASW7.csv TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
test_ASW8.csv FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
test_ASW9.csv FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE
require(tidyverse)
data.frame(filename = list.files(".", pattern = "ASW"), stringsAsFactors = F) %>%
mutate(lst = map(filename,~read.csv(.x)),
dat = map(lst, ~as.data.frame(t(.x[['b']])))) %>%
select(filename,dat) %>%
unnest()