【发布时间】:2018-06-08 04:58:50
【问题描述】:
如何使用 fwf 将行向量(不是文件)读入数据框中?
目前,我可以想到两种方法,但我真的觉得必须有更好的方法。任何想法都值得赞赏。
使用
data.frame()+substring()。它可以完成这项工作,但是如果数据“参差不齐”(就是这样,如下所示的块),我将无法轻松概括它。我是从这里的答案中得到的:Read fixed width text file-
使用来自阅读器的
write_lines()和read_fwf()。我想避免编写外部文件。实际上,read_fwf()似乎应该直接对文字数据进行工作,但我无法使其工作:它一直将行的字符串/向量理解为路径。比如:write_lines(literaldata, "fwf_sample.txt") read_fwf("fwf_sample.txt", fwf_widths(rep(8, 12)))
下面是一个数据示例,其中包含导致错误的代码。
literaldata <- "CHEXA 278375 2 419991 419976 418527 418528 434131 434116+ 420108 420107
CHEXA 278376 2 420028 420029 419994 419997 434168 434169+ 434134 434137
CHEXA 278377 2 419961 418516 418517 419956 434101 420119+ 420118 434096
CHEXA 278378 2 419965 418519 418520 419967 434105 420116+ 420115 434107
CHEXA 278379 2 419965 419984 420025 419971 434105 434124+ 434165 434111
CHEXA 278380 2 418521 419972 419967 418520 420114 434112+ 434107 420115"
library(readr)
lines<-read_lines(literaldata)
# The code above is just to get a reproducible example similar to the one I get in the data cleaning process
read_fwf(lines, fwf_widths(rep(8, 12)))
Error: 'CHEXA 278375 2 419991 419976 418527 418528 434131
434116+ 420108 420107CHEXA 278376 ...
提前致谢
【问题讨论】:
-
read_fwf(textConnection(literaldata), fwf_widths(rep(8,12)))会做这项工作吗? -
你能贴出
read_fwf()将文字数据误认为路径名的代码吗?因为它适用于您发布的数据。