Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用read.table指定标题行的结尾_R_Import_Header - Fatal编程技术网

如何使用read.table指定标题行的结尾

如何使用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

我有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_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 "