如果不同的列在r中具有不同的宽度,如何计算read.fwf的宽度

Kus*_*tel 1 r fixed-width

试图将文件加载到r(跳过前4行) http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for

这是固定宽度文件,我不知道如何从文件计算宽度.

有人可以告诉我如何将固定宽度的文件加载到R?

42-*_*42- 5

在控制台上创建标尺:

cat(">",paste0(rep(c(1:9,"+"),6),collapse=""))
Run Code Online (Sandbox Code Playgroud)

粘贴在第一行,然后计数:

> cat(">",paste0(rep(c(1:9,"+"),6),collapse=""))
> 123456789+123456789+123456789+123456789+123456789+123456789+
> 03JAN1990     23.4-0.4     25.1-0.3     26.6 0.0     28.6 0.3
Error: unexpected symbol in "03JAN1990"
Run Code Online (Sandbox Code Playgroud)

如果您查看该文件,您会看到唯一缺少空格的地方是带有减号的列.所以另一种方法是用" - "替换所有" - "实例,即在需要它的地方创建空格,然后用read.table读取:

dat <- read.table(text= gsub("\\-", " -", 
                             readLines(url("http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for"))),
                  skip=4)

> str(dat)
'data.frame':   1284 obs. of  9 variables:
 $ V1: Factor w/ 1284 levels "01APR1992","01APR1998",..: 98 394 689 984 1266 265 560 855 1150 279 ...
 $ V2: num  23.4 23.4 24.2 24.4 25.1 25.8 25.9 26.1 26.1 26.7 ...
 $ V3: num  -0.4 -0.8 -0.3 -0.5 -0.2 0.2 -0.1 -0.1 -0.2 0.3 ...
 $ V4: num  25.1 25.2 25.3 25.5 25.8 26.1 26.4 26.7 26.7 26.7 ...
 $ V5: num  -0.3 -0.3 -0.3 -0.4 -0.2 -0.1 0 0.2 -0.1 -0.2 ...
 $ V6: num  26.6 26.6 26.5 26.5 26.7 26.8 26.9 27.1 27.2 27.3 ...
 $ V7: num  0 0.1 -0.1 -0.1 0.1 0.1 0.2 0.3 0.3 0.2 ...
 $ V8: num  28.6 28.6 28.6 28.4 28.4 28.4 28.5 28.9 29 28.9 ...
 $ V9: num  0.3 0.3 0.3 0.2 0.2 0.3 0.4 0.8 0.8 0.7 ...
Run Code Online (Sandbox Code Playgroud)

您甚至可以只跳过前三行并获取标题:

> dat <- read.table(text= gsub("\\-", " -", readLines(url("http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for"))),
                   header=TRUE, skip=3)
> str(dat)
'data.frame':   1284 obs. of  9 variables:
 $ Week  : Factor w/ 1284 levels "01APR1992","01APR1998",..: 98 394 689 984 1266 265 560 855 1150 279 ...
 $ SST   : num  23.4 23.4 24.2 24.4 25.1 25.8 25.9 26.1 26.1 26.7 ...
 $ SSTA  : num  -0.4 -0.8 -0.3 -0.5 -0.2 0.2 -0.1 -0.1 -0.2 0.3 ...
 $ SST.1 : num  25.1 25.2 25.3 25.5 25.8 26.1 26.4 26.7 26.7 26.7 ...
 $ SSTA.1: num  -0.3 -0.3 -0.3 -0.4 -0.2 -0.1 0 0.2 -0.1 -0.2 ...
 $ SST.2 : num  26.6 26.6 26.5 26.5 26.7 26.8 26.9 27.1 27.2 27.3 ...
 $ SSTA.2: num  0 0.1 -0.1 -0.1 0.1 0.1 0.2 0.3 0.3 0.2 ...
 $ SST.3 : num  28.6 28.6 28.6 28.4 28.4 28.4 28.5 28.9 29 28.9 ...
 $ SSTA.3: num  0.3 0.3 0.3 0.2 0.2 0.3 0.4 0.8 0.8 0.7 ...
Run Code Online (Sandbox Code Playgroud)