在 R 中读取具有不同宽度和多个 headers 的行
Read rows with different Width and several headers in R
我有以下日志需要在 R 中阅读
MO RSITE COMB FHOP MODEL
RXOTG-0 3BFR42 HYB SY G12
SWVERREPL SWVERDLD SWVERACT TMODE
B1312R078G B1312R078G SCM
MO RSITE COMB FHOP MODEL
RXOTG-1 3BFR42 HYB SY G12
SWVERREPL SWVERDLD SWVERACT TMODE
B1312R078G B1312R078G SCM
我需要这样阅读
MO RSITE COMB FHOP MODEL SWVERREPL SWVERDLD SWVERACT TMODE
RXOTG-0 3BFR42 HYB SY G12 B1312R078G B1312R078G SCM
RXOTG-1 3BFR42 HYB SY G12 B1312R078G B1312R078G SCM
我不能使用 read.fwf,因为每一行的宽度都不同,而且每一行都有一个 header。我能阅读的唯一方法是使用 read.table sep = " " 并且经过大量转换后我得到了想要的输出。
有人有什么减少编码阅读的建议吗?
您可以通过使用 readLines
然后提取行,将它们粘贴在一起并使用 read.table
中的 text
参数导入数据来获得一些方法。
f <- readLines("myFile.txt")
header <- paste(f[1], f[3])
body <- sapply(seq(1, length(f), 6), function(i) paste(f[i+1], f[i+4]))
read.table(header = FALSE, text = paste(body, collapse = "\n"))
这将省略空白列。如果您需要这个,或者不同的列是空白的,请改用 read.fwf
。
这将读取您的示例,但如果任何条目未加引号嵌入白色,则会失败 space:
data.frame( scan(text=txt,
what=list( MO="", RSITE="", COMB="", FHOP="",
MODEL="", SWVERREPL="", SWVERDLD="",
SWVERACT ="", TMODE=""),
multi.line=TRUE))[c(TRUE, FALSE), ] # removes extraneous extra "headers"
#--------------
Read 4 records
MO RSITE COMB FHOP MODEL SWVERREPL SWVERDLD SWVERACT TMODE
1 MO RSITE COMB FHOP MODEL RXOTG-0 3BFR42 HYB SY
3 MO RSITE COMB FHOP MODEL RXOTG-1 3BFR42 HYB SY
我有以下日志需要在 R 中阅读
MO RSITE COMB FHOP MODEL
RXOTG-0 3BFR42 HYB SY G12
SWVERREPL SWVERDLD SWVERACT TMODE
B1312R078G B1312R078G SCM
MO RSITE COMB FHOP MODEL
RXOTG-1 3BFR42 HYB SY G12
SWVERREPL SWVERDLD SWVERACT TMODE
B1312R078G B1312R078G SCM
我需要这样阅读
MO RSITE COMB FHOP MODEL SWVERREPL SWVERDLD SWVERACT TMODE
RXOTG-0 3BFR42 HYB SY G12 B1312R078G B1312R078G SCM
RXOTG-1 3BFR42 HYB SY G12 B1312R078G B1312R078G SCM
我不能使用 read.fwf,因为每一行的宽度都不同,而且每一行都有一个 header。我能阅读的唯一方法是使用 read.table sep = " " 并且经过大量转换后我得到了想要的输出。
有人有什么减少编码阅读的建议吗?
您可以通过使用 readLines
然后提取行,将它们粘贴在一起并使用 read.table
中的 text
参数导入数据来获得一些方法。
f <- readLines("myFile.txt")
header <- paste(f[1], f[3])
body <- sapply(seq(1, length(f), 6), function(i) paste(f[i+1], f[i+4]))
read.table(header = FALSE, text = paste(body, collapse = "\n"))
这将省略空白列。如果您需要这个,或者不同的列是空白的,请改用 read.fwf
。
这将读取您的示例,但如果任何条目未加引号嵌入白色,则会失败 space:
data.frame( scan(text=txt,
what=list( MO="", RSITE="", COMB="", FHOP="",
MODEL="", SWVERREPL="", SWVERDLD="",
SWVERACT ="", TMODE=""),
multi.line=TRUE))[c(TRUE, FALSE), ] # removes extraneous extra "headers"
#--------------
Read 4 records
MO RSITE COMB FHOP MODEL SWVERREPL SWVERDLD SWVERACT TMODE
1 MO RSITE COMB FHOP MODEL RXOTG-0 3BFR42 HYB SY
3 MO RSITE COMB FHOP MODEL RXOTG-1 3BFR42 HYB SY