将R read_fwf应用于文件列表

问题描述

我想将固定宽度文件的目录读入单个数据帧,并尝试使用以下代码从readr使用read_fwf做到这一点:

library(plyr)
library(tidyverse)

file_list <- dir("./Data",full.names = TRUE)

col_widths <- rep.int(5,4160)
data_import <- ldply(file_list,function(x) read_fwf(fwf_widths(col_widths),skip = 2))

这将返回错误:

 Error: `file` must be a string,raw vector or a connection. 

如果我执行read_fwf(file_list[[1]],fwf_widths(col_widths),skip = 2),则此操作确实可以从单个文件中导入数据。是什么原因导致read_fwf无法应用到file_list的每个元素?我误会了ldply的作用吗?

非常感谢

解决方法

请问申请家庭可以解决这个问题吗?

如果是,我建议以下内容:

file_list <- <-list.files(pattern = "*./Data")
file_list <-sapply(file_list,read_fwf)
,

您需要将数据作为第一个参数传递给read_fwf。试试:

data_import <- ldply(file_list,function(x) 
                      read_fwf(x,fwf_widths(col_widths),skip = 2))

plyr已退休,因此您可能对这些替代解决方案感兴趣:

#Option 1
data_import <- purrr::map_df(file_list,function(x) 
                    read_fwf(x,skip = 2))

#Option 2
data_import <- do.call(rbind,lapply(file_list,function(x) 
                   read_fwf(x,skip = 2)))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...