在R中组合具有相似名称的嵌套列表项

在R中组合具有相似名称的嵌套列表项,r,R,这个问题在某种程度上延续了我先前提出的一个问题。建议将我的数据存储在列表中,而不是作为全局环境中的单个项目。因此,我正在尝试将所有类似的文件类型(如csv)导入列表列表中。每个嵌套列表表示多个时间序列.csv文件中的一个。目前使用以下代码执行此操作: ImportData <- function(mypattern,...) { mypattern <- readline(prompt = "Enter File Type:") temp <- list.files("

这个问题在某种程度上延续了我先前提出的一个问题。建议将我的数据存储在列表中,而不是作为全局环境中的单个项目。因此,我正在尝试将所有类似的文件类型(如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()
我遇到的问题是,在运行
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()