读取R中跨多行的固定宽度文件中的观测值
我正在尝试读取R中的dat文件。数据可用 关于数据集的规范是可用的 我的问题的第一部分是通过使用sep选项解决的,它提供了关于每列开始位置的信息,并提供了na.strings=*。然而,我不知道如何处理跨越一条以上直线的单个观测 在该数据集中,所有观测值跨越2条线 您可以使用选项fill=TRUE 然后,如果您想获得separated data.frame中的每一行;我是说第1行,第3行,。。在data.frame和第2行、第4行中,。。在另一个data.frame中,可以执行以下操作:读取R中跨多行的固定宽度文件中的观测值,r,read.table,R,Read.table,我正在尝试读取R中的dat文件。数据可用 关于数据集的规范是可用的 我的问题的第一部分是通过使用sep选项解决的,它提供了关于每列开始位置的信息,并提供了na.strings=*。然而,我不知道如何处理跨越一条以上直线的单个观测 在该数据集中,所有观测值跨越2条线 您可以使用选项fill=TRUE 然后,如果您想获得separated data.frame中的每一行;我是说第1行,第3行,。。在data.frame和第2行、第4行中,。。在另一个data.frame中,可以执行以下操作: dat
dat.even <- dat[c(FALSE,TRUE),]
dat.odd <- dat[c(TRUE,FALSE),]
这里有一个解决方法:
link <- "http://www.amstat.org/publications/jse/datasets/93cars.dat.txt"
结果是:
> head(dat)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 Acura Integra Small 12.9 15.9 18.8 25 31 0 1 4 1.8 140 6300 2890 1 13.2
2 Acura Legend Midsize 29.2 33.9 38.7 18 25 2 1 6 3.2 200 5500 2335 1 18.0
3 Audi 90 Compact 25.9 29.1 32.3 20 26 1 1 6 2.8 172 5500 2280 1 16.9
4 Audi 100 Midsize 30.8 37.7 44.6 19 26 2 1 6 2.8 172 5500 2535 1 21.1
5 BMW 535i Midsize 23.7 30.0 36.2 22 30 1 0 4 3.5 208 5700 2545 1 21.1
6 Buick Century Midsize 14.2 15.7 17.3 22 31 1 1 4 2.2 110 5200 2565 0 16.4
V18 V19 V20 V21 V22 V23 V24 V25 V26
1 5 177 102 68 37 26.5 11 2705 0
2 5 195 115 71 38 30.0 15 3560 0
3 5 180 102 67 37 28.0 14 3375 0
4 6 193 106 70 37 31.0 17 3405 0
5 4 186 109 69 39 27.0 13 3640 0
6 6 189 105 69 41 28.0 16 2880 1
实际上,您需要read.fwf来执行此操作
设置一些示例数据
txt <- 'Acura Integra Small 12.9 15.9 18.8 25 31 0 1 4 1.8 140 6300
2890 1 13.2 5 177 102 68 37 26.5 11 2705 0
Acura Legend Midsize 29.2 33.9 38.7 18 25 2 1 6 3.2 200 5500
2335 1 18.0 5 195 115 71 38 30.0 15 3560 0
Audi 90 Compact 25.9 29.1 32.3 20 26 1 1 6 2.8 172 5500
2280 1 16.9 5 180 102 67 37 28.0 14 3375 0'
使用pander软件包漂亮地打印表格,因为它有很多列
require(pander)
pandoc.table(DF)
##
## ---------------------------------------------------
## V1 V2 V3 V4 V5 V6 V7 V8 V9
## ----- ------- ------- ---- ---- ---- ---- ---- ----
## Acura Integra Small 12.9 15.9 18.8 25 31 0
##
## Acura Legend Midsize 29.2 33.9 38.7 18 25 2
##
## Audi 90 Compact 25.9 29.1 32.3 20 26 1
## ---------------------------------------------------
##
## Table: Table continues below
##
##
## -----------------------------------------------
## V10 V11 V12 V13 V14 V15 V16 V17
## ----- ----- ----- ----- ----- ----- ----- -----
## 1 4 1.8 140 6300 2890 1 13.2
##
## 1 6 3.2 200 5500 2335 1 18.0
##
## 1 6 2.8 172 5500 2280 1 16.9
## -----------------------------------------------
##
## Table: Table continues below
##
##
## -----------------------------------------------
## V18 V19 V20 V21 V22 V23 V24 V25
## ----- ----- ----- ----- ----- ----- ----- -----
## 5 177 102 68 37 26.5 11 2705
##
## 5 195 115 71 38 30.0 15 3560
##
## 5 180 102 67 37 28.0 14 3375
## -----------------------------------------------
##
## Table: Table continues below
##
##
## -----
## V26
## -----
## 0
##
## 0
##
## 0
## -----
##
你能解释一下@ArkidMitra的行吗?我添加了一个解释。对我来说效果很好。我的下一个问题是,有没有更标准的方法?
dat <- read.table(text = lines, na.string = "*")
> head(dat)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 Acura Integra Small 12.9 15.9 18.8 25 31 0 1 4 1.8 140 6300 2890 1 13.2
2 Acura Legend Midsize 29.2 33.9 38.7 18 25 2 1 6 3.2 200 5500 2335 1 18.0
3 Audi 90 Compact 25.9 29.1 32.3 20 26 1 1 6 2.8 172 5500 2280 1 16.9
4 Audi 100 Midsize 30.8 37.7 44.6 19 26 2 1 6 2.8 172 5500 2535 1 21.1
5 BMW 535i Midsize 23.7 30.0 36.2 22 30 1 0 4 3.5 208 5700 2545 1 21.1
6 Buick Century Midsize 14.2 15.7 17.3 22 31 1 1 4 2.2 110 5200 2565 0 16.4
V18 V19 V20 V21 V22 V23 V24 V25 V26
1 5 177 102 68 37 26.5 11 2705 0
2 5 195 115 71 38 30.0 15 3560 0
3 5 180 102 67 37 28.0 14 3375 0
4 6 193 106 70 37 31.0 17 3405 0
5 4 186 109 69 39 27.0 13 3640 0
6 6 189 105 69 41 28.0 16 2880 1
txt <- 'Acura Integra Small 12.9 15.9 18.8 25 31 0 1 4 1.8 140 6300
2890 1 13.2 5 177 102 68 37 26.5 11 2705 0
Acura Legend Midsize 29.2 33.9 38.7 18 25 2 1 6 3.2 200 5500
2335 1 18.0 5 195 115 71 38 30.0 15 3560 0
Audi 90 Compact 25.9 29.1 32.3 20 26 1 1 6 2.8 172 5500
2280 1 16.9 5 180 102 67 37 28.0 14 3375 0'
DF <- read.fwf(textConnection(txt),
widths = list(
c(14, 15, 8, 5, 5, 5, 3, 3, 2, 2, 2, 4, 4, 4),
c(5, 2, 5, 2, 4, 4, 3, 3, 5, 3, 5, 1)
),
header = FALSE)
require(pander)
pandoc.table(DF)
##
## ---------------------------------------------------
## V1 V2 V3 V4 V5 V6 V7 V8 V9
## ----- ------- ------- ---- ---- ---- ---- ---- ----
## Acura Integra Small 12.9 15.9 18.8 25 31 0
##
## Acura Legend Midsize 29.2 33.9 38.7 18 25 2
##
## Audi 90 Compact 25.9 29.1 32.3 20 26 1
## ---------------------------------------------------
##
## Table: Table continues below
##
##
## -----------------------------------------------
## V10 V11 V12 V13 V14 V15 V16 V17
## ----- ----- ----- ----- ----- ----- ----- -----
## 1 4 1.8 140 6300 2890 1 13.2
##
## 1 6 3.2 200 5500 2335 1 18.0
##
## 1 6 2.8 172 5500 2280 1 16.9
## -----------------------------------------------
##
## Table: Table continues below
##
##
## -----------------------------------------------
## V18 V19 V20 V21 V22 V23 V24 V25
## ----- ----- ----- ----- ----- ----- ----- -----
## 5 177 102 68 37 26.5 11 2705
##
## 5 195 115 71 38 30.0 15 3560
##
## 5 180 102 67 37 28.0 14 3375
## -----------------------------------------------
##
## Table: Table continues below
##
##
## -----
## V26
## -----
## 0
##
## 0
##
## 0
## -----
##