使用此问题的解决方案时遇到问题:
Why the field separator character must be only one byte?
我的文件包含以~~~
分隔的列,当然read.table
失败,错误为invalid 'sep' value: must be one byte
。我用Google搜索并找到了上述问题,该问题成功地将文件读入字符矩阵。
但是,我现在想将此字符矩阵转换为数据框,自动为每个列分配类型,并确定规则,如果read.table
对原始文件有效,例如:日期和字符串转换为因子等。
答案 0 :(得分:1)
Code: ABM TWO: Gender: M - 0
Code: GAS ONE: one Gender: F - 1
Code: HUMMS TWO: Gender: M - 0
Code: STEM TWO: Gender: M - 0
有一个辅助函数read.table
,其帮助文件说明:
这主要是read.table的辅助函数。给定一个字符向量,它会尝试将其转换为逻辑,整数,数字或复数,并且无法将其转换为因子,除非as.is = TRUE。选择可接受所有非缺失值的第一种类型。
utils::type.conversion
中调用此函数的位是:
read.table
其中省略号处理在 for (i in (1L:cols)[do]) {
data[[i]] <- if (is.na(colClasses[i]))
type.convert(data[[i]], as.is = as.is[i], dec = dec,
numerals = numerals, na.strings = character(0L))
...
}
调用中配置的列类型。
就我的目的而言,以下就足够了:
read.table
其中df2 <- do.call(rbind,strsplit(readLines('test.txt'),'~~~',fixed=T))
df2_processed <-
setNames(
as.data.frame(lapply(1:ncol(df2), function(i) {
type.convert(df2[,i])}), stringsAsFactors = FALSE),
paste0('v', 1:ncol(df2)))
是以下文本文件:
test.txt