将 R read_fwf 应用于文件列表
Applying R read_fwf to a list of files
我想将固定宽度文件的目录读取到单个数据帧中,并尝试使用 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))
这个returns错误:
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 的作用?
非常感谢
会是 apply-familiy 的解决方案吗?
如果是,我建议如下:
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, fwf_widths(col_widths), skip = 2))
#Option 2
data_import <- do.call(rbind, lapply(file_list, function(x)
read_fwf(x, fwf_widths(col_widths), skip = 2)))
我想将固定宽度文件的目录读取到单个数据帧中,并尝试使用 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))
这个returns错误:
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 的作用?
非常感谢
会是 apply-familiy 的解决方案吗?
如果是,我建议如下:
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, fwf_widths(col_widths), skip = 2))
#Option 2
data_import <- do.call(rbind, lapply(file_list, function(x)
read_fwf(x, fwf_widths(col_widths), skip = 2)))