1

我有多年的数据要从 .txt(制表符分隔)读取到 data.frame 或 data.table 格式以在 R 中工作。对于每一年,都需要附加季度文件。我的搜索产生了一些很好的代码来查找所有季度文件,并使用 FREAD 和 BIND_ROWS 创建 1 个年度文件。@Maiasaura

我发现了一个奇怪的地方——使用 FREAD 而不是 READ.TABLE 会导致某些向量的类不同。pat_age 应为字母数字“00”、“01”、“02”。READ.TABLE 似乎按预期处理此问题 - FREAD 创建一个整数。因此,我添加了 colClasses 来控制 PAT_AGE 类。

不幸的是 - 季度文件中的列名有时是大写的 - 其他的是小写 (PAT_AGE pat_age)。当我在 .txt 文件中阅读时,有什么方法可以控制它?带有 tolower 的 ColClasses 对我不起作用。

tabtest <- list.files( pattern= ".*PUDF.*base.*tab.*" ,   full.names = TRUE)
 %>% lapply( fread,  header=TRUE,   colClasses=c(pat_age="character"))   %>% 
   dplyr::bind_rows()

我预计数据会混乱 - 并且随着我每年的移动,可能需要调整其他列名和类。

注意:如果我不能在 lapply 语句中更改大小写,我是否正确 - 我需要对 .txt 文件执行此操作?colClasses 函数要求“pat_age”在所有文件中都小写。

注意:遇到这个问题:
fread (data.table) select columns, throw error if column not found

是否可以对其进行修改以读取和修改标题 - 然后读取带有更正标题的整个 .txt 文件?

最新尝试 - 认为它可能工作正常。大量的努力/语法只是为了改变列名的大小写!

read_cols <- function(x) {
titles <- fread(x , nrows = 0, header = TRUE, stringsAsFactors = FALSE )
var.names<-tolower(colnames(titles))
rest <- fread(x ,   skip =1  )
names(rest) <- var.names
return(rest)
}


tabtest2 <- list.files( pattern=".*PUDF.*base.*tab.*",   full.names = TRUE) 
%>%    lapply( read_cols ) 
%>%   dplyr::bind_rows()

谢谢你。

4

0 回答 0