如何使用read.table指定标题行的结尾
我有ASCII文件,其中的数据由如何使用read.table指定标题行的结尾,r,import,header,R,Import,Header,我有ASCII文件,其中的数据由$符号分隔 数据中有23列,第一行是列名,但行尾之间存在不一致,这会导致R不正确地导入数据,方法是将数据相对于列向左移动 标题行: ISR$CASE$I_F_COD$FOLL_SEQ$IMAGE$EVENT_DT$MFR_DT$FDA_DT$REPT_COD$MFR_NUM$MFR_SNDR$AGE$AGE_COD$GNDR_COD$E_SUB$WT$WT_COD$REPT_DT$OCCP_COD$DEATH_DT$TO_MFR$CONFID$REPORTER_C
$
符号分隔
数据中有23列,第一行是列名,但行尾之间存在不一致,这会导致R不正确地导入数据,方法是将数据相对于列向左移动
标题行:
ISR$CASE$I_F_COD$FOLL_SEQ$IMAGE$EVENT_DT$MFR_DT$FDA_DT$REPT_COD$MFR_NUM$MFR_SNDR$AGE$AGE_COD$GNDR_COD$E_SUB$WT$WT_COD$REPT_DT$OCCP_COD$DEATH_DT$TO_MFR$CONFID$REPORTER_COUNTRY
它不会以$
符号结尾
第一行:
7215577$8135839$I$$7215577-0$20101011$$20110104$DIR$$$67$YR$F$N$220$LBS$20110102$CN$$N$Y$UNITED STATES$
以$
符号结尾
我的导入命令:
read.table(filename, header=TRUE, sep="$", comment.char="", header=TRUE, quote="")
我的猜测是,行尾之间的不一致导致R认为记录比标题多了一列,从而使第一列成为row.names列,这是不正确的。添加规范row.names=NULL
不会解决此问题
如果我在文件中手动添加$符号,问题就解决了,但这是不可行的,因为问题发生在数百个文件中。有没有办法指定如何读取标题行?我还有别的选择吗
附加信息:标题在不同的文件中更改,因此我无法设置自己的列名向量创建虚拟测试文件:
cat("ISR$CASE$I_F_COD$FOLL_SEQ$IMAGE$EVENT_DT$MFR_DT$FDA_DT$REPT_COD$MFR_NUM$MFR_SNDR$AGE$AGE_COD$GNDR_COD$E_SUB$WT$WT_COD$REPT_DT$OCCP_COD$DEATH_DT$TO_MFR$CONFID$REPORTER_COUNTRY\n7215577$8135839$I$$7215577-0$20101011$$20110104$DIR$$$67$YR$F$N$220$LBS$20110102$CN$$N$Y$UNITED STATES$",
file="deleteme.txt",
"\n")
解决方案使用gsub
:
首先以文本形式读取文件,然后编辑其内容:
file_path <- "deleteme.txt"
fh <- file(file_path)
file_content <- readLines(fh)
close(fh)
或从所有行的末尾删除$
:
file_content <- gsub("\\$$", "", file_content)
现在我们可以读取该文件:
df <- read.table(paste0("fixed_", file_path), header=TRUE, sep="$", comment.char="", quote="", stringsAsFactors=FALSE)
非常感谢。我很好奇是否有直接通过read.table的解决方案,而不是使用另一个函数,如gsub或paste,但我想我必须这样做。可能还有其他解决方案。但至少,此解决方案的优点是固定文件具有“正常”结构。。。
cat(paste0(file_content, collapse="\n"), file=paste0("fixed_", file_path), "\n")
df <- read.table(paste0("fixed_", file_path), header=TRUE, sep="$", comment.char="", quote="", stringsAsFactors=FALSE)
str(df)
'data.frame': 1 obs. of 23 variables:
$ ISR : int 7215577
$ CASE : int 8135839
$ I_F_COD : chr "I"
$ FOLL_SEQ : logi NA
$ IMAGE : chr "7215577-0"
$ EVENT_DT : int 20101011
$ MFR_DT : logi NA
$ FDA_DT : int 20110104
$ REPT_COD : chr "DIR"
$ MFR_NUM : logi NA
$ MFR_SNDR : logi NA
$ AGE : int 67
$ AGE_COD : chr "YR"
$ GNDR_COD : logi FALSE
$ E_SUB : chr "N"
$ WT : int 220
$ WT_COD : chr "LBS"
$ REPT_DT : int 20110102
$ OCCP_COD : chr "CN"
$ DEATH_DT : logi NA
$ TO_MFR : chr "N"
$ CONFID : chr "Y"
$ REPORTER_COUNTRY: chr "UNITED STATES "