Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';使用rbind将多个.csv文件加载到R中的单个数据帧中的函数有什么问题?_R_Csv_Rbind - Fatal编程技术网

什么';使用rbind将多个.csv文件加载到R中的单个数据帧中的函数有什么问题?

什么';使用rbind将多个.csv文件加载到R中的单个数据帧中的函数有什么问题?,r,csv,rbind,R,Csv,Rbind,我编写了以下函数来组合300.csv文件。我的目录名是“specdata”。我已经完成了以下执行步骤 x <- function(directory) { dir <- directory data_dir <- paste(getwd(),dir,sep = "/") files <- list.files(data_dir,pattern = '\\.csv') tables <- lapply

我编写了以下函数来组合300.csv文件。我的目录名是“specdata”。我已经完成了以下执行步骤

x <- function(directory) {     
    dir <- directory    
    data_dir <- paste(getwd(),dir,sep = "/")    
    files  <- list.files(data_dir,pattern = '\\.csv')    
    tables <- lapply(paste(data_dir,files,sep = "/"), read.csv, header = TRUE)    
    pollutantmean <- do.call(rbind , tables)         
}

# Step 2: call the function
x("specdata")

# Step 3: inspect results
head(pollutantmean)

Error in head(pollutantmean) : object 'pollutantmean' not found

x在当前函数中
pollutanMean
仅在函数
x
的范围内可用。将您的函数修改为此

x <- function(directory) { 

    dir <- directory

    data_dir <- paste(getwd(),dir,sep = "/")

    files  <- list.files(data_dir,pattern = '\\.csv')

    tables <- lapply(paste(data_dir,files,sep = "/"), read.csv, header = TRUE)

    assign('pollutantmean',do.call(rbind , tables))

}

x函数中有很多不必要的代码。您可以将其简化为:

load_data <- function(path) { 
  files <- dir(path, pattern = '\\.csv', full.names = TRUE)
  tables <- lapply(files, read.csv)
  do.call(rbind, tables)
}

pollutantmean <- load_data("specdata")
load_data
``{r echo=FALSE,warning=FALSE,message=FALSE}
setwd(“~/Data/R/BacklogReporting/Data/passdue/global/”)##文件所在位置
path=“~/Data/R/BacklogReporting/Data/passdue/global/”

out.file用他与莱昂内尔·亨利(Lionel Henry)合著的最新版本中的代码更新韦翰教授的上述答案:

Tbl <-
    list.files(pattern="*.csv") %>% 
    map_df(~read_csv(.))
Tbl%
地图测向(~read\u csv()
如果类型转换是厚颜无耻的,您可以使用此命令强制所有列作为字符

Tbl <-
    list.files(pattern="*.csv") %>% 
    map_df(~read_csv(., col_types = cols(.default = "c")))
Tbl%
map_df(~read_csv(,col_types=cols(.default=“c”))
如果您想深入子目录来构建最终要绑定的文件列表,那么请确保包含路径名,并在列表中使用文件的全名注册文件。这将允许绑定工作在当前目录之外进行。(将完整路径名视为类似于通行证的操作,以允许跨目录“边界”返回。)

Tbl%
map_df(~read_csv(,col_types=cols(.default=“c”))
正如威克姆教授所描述的(大约在中途):

map\u df(x,f)
实际上与
do.call(“rbind”,lappy(x,f))
相同,但引擎盖下的效率更高


感谢Jake Kaupp向我介绍map_df()。

这可以通过tidyverse的dplyr和purr非常简洁地完成。其中x是您可以简单使用的csv文件的名称列表:

bind_rows(map(x, read.csv))

将read.csv映射到x会生成一个dfs列表,该列表绑定了_行,然后整齐地组合在一起

如果您的csv文件位于其他目录中,您可以使用以下内容:

readFilesInDirectory <- function(directory, pattern){
  files <- list.files(path = directory,pattern = pattern)
  for (f in files){
    file <- paste(directory,files, sep ="")
    temp <- lapply(file, fread, sep=",")
    data <- rbindlist( temp )
  }
  return(data)
}

readFilesInDirectory或现在使用
dplyr::bind_rows
而不是已被弃用的
dplyr::rbind_list
。此外,使用
readr::read_csv
read.csv
快得多。如果Coursera真的带您来这里,请阅读他们首先提供的优秀实践作业。(截至今天,链接为:)代码有效-根据Daniel Marcelino的代码修改。感谢您花时间发表评论。鉴于TidyverseVery优雅的现状,这是最好的答案。谢谢
bind_rows(map(x, read.csv))
readFilesInDirectory <- function(directory, pattern){
  files <- list.files(path = directory,pattern = pattern)
  for (f in files){
    file <- paste(directory,files, sep ="")
    temp <- lapply(file, fread, sep=",")
    data <- rbindlist( temp )
  }
  return(data)
}