read.table 期望 txt 文件中有 39 列,而实际上只有 20 列

问题描述 投票:0回答:1

我正在尝试读取文本文件。由于某种原因,我收到以下错误消息:

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 1 did not have 39 elements

我使用了以下代码:

FAMA <- read.table("FAMAFrench.txt", header = TRUE)

只有20列数据,每一行都没有间隙。列由空格分隔。 有1166行数据

文本文件如下所示:

month  <= 0      Lo 30  Med 40   Hi 30   Lo 20   Qnt 2   Qnt 3   Qnt 4   Hi 20   Lo 10   Dec 2   Dec 3   Dec 4   Dec 5   Dec 6   Dec 7   Dec 8   Dec 9   Hi 10
192607  -99.99    0.14    1.54    3.42    0.37    0.48    1.68    1.41    3.67   -0.12    0.52   -0.05    0.82    1.39    1.89    1.62    1.29    3.53    3.71
192608  -99.99    3.19    2.73    2.91    2.21    3.58    3.70    1.50    3.07    1.13    2.55    4.00    3.32    2.76    4.41    1.54    1.49    0.61    3.79
192609  -99.99   -1.73   -0.88    0.80   -1.39   -1.25    0.07   -0.23    0.81    0.59   -2.00   -2.01   -0.77   -0.01    0.13   -1.93    0.74   -0.77    1.25
192610  -99.99   -2.94   -3.26   -2.79   -2.56   -3.99   -2.65   -3.36   -2.74   -4.29   -2.01   -3.25   -4.45   -3.02   -2.39   -3.55   -3.26   -3.36   -2.56
192611  -99.99   -0.38    3.73    2.74   -0.95    3.03    3.50    3.25    2.71   -3.28   -0.23    0.08    4.90    3.56    3.45    3.60    3.05    3.86    2.40
192612  -99.99    4.15    1.66    3.04    2.45    3.47    1.37    2.81    3.00   -2.49    3.93    5.60    2.22    1.33    1.40    1.81    3.37    3.11    2.97
r txt file-read
1个回答
0
投票

各列之间由多个空格分隔。不过,

read.table
只能使用一个字节。您可以做的是跳过第一行(即标题),并使用
readLines
单独读取它。然后您可以在
strsplit
(两个或更多空格)处
'\\s{2,}'
并使用它
setNames

read.table('file.txt', skip=1) |>
  setNames(el(strsplit(readLines('file.txt', 1), '\\s{2,}')))
#    month   <= 0 Lo 30 Med 40 Hi 30 Lo 20 Qnt 2 Qnt 3 Qnt 4 Hi 20 Lo 10 Dec 2 Dec 3 Dec 4 Dec 5 Dec 6 Dec 7 Dec 8 Dec 9 Hi 10
# 1 192607 -99.99  0.14   1.54  3.42  0.37  0.48  1.68  1.41  3.67 -0.12  0.52 -0.05  0.82  1.39  1.89  1.62  1.29  3.53  3.71
# 2 192608 -99.99  3.19   2.73  2.91  2.21  3.58  3.70  1.50  3.07  1.13  2.55  4.00  3.32  2.76  4.41  1.54  1.49  0.61  3.79
# 3 192609 -99.99 -1.73  -0.88  0.80 -1.39 -1.25  0.07 -0.23  0.81  0.59 -2.00 -2.01 -0.77 -0.01  0.13 -1.93  0.74 -0.77  1.25
# 4 192610 -99.99 -2.94  -3.26 -2.79 -2.56 -3.99 -2.65 -3.36 -2.74 -4.29 -2.01 -3.25 -4.45 -3.02 -2.39 -3.55 -3.26 -3.36 -2.56
# 5 192611 -99.99 -0.38   3.73  2.74 -0.95  3.03  3.50  3.25  2.71 -3.28 -0.23  0.08  4.90  3.56  3.45  3.60  3.05  3.86  2.40
# 6 192612 -99.99  4.15   1.66  3.04  2.45  3.47  1.37  2.81  3.00 -2.49  3.93  5.60  2.22  1.33  1.40  1.81  3.37  3.11  2.97
© www.soinside.com 2019 - 2024. All rights reserved.