從圖中可以發現,每一個column都是固定的寬度。這種資料叫做Fixed Width Format Files, 可以用base R中的read.fwf或者readr中的read_fwf讀取資料。這兩者使用方法相似,但read.fwf沒有提供處理NA資料的功能,所以這個資料我會用後者進行讀取。
因爲column的寬度是不變的,我們只需要告訴read_fwf每一個column具體寬度是多少即可讀取(參數col_positions)
寬度指的是有多少個字符。如圖,我用的方法是複製其中一行到Rstudio中(或者你喜歡的編輯器),左下角紅色的圈中會告訴你cursor的位置,圖中31指的是cursor的位置左邊有31個字符。靠Rstudio幫忙很快就能數出17個column的寬度,可以直接複製我的code嘗試一下。
# dta <- read.fwf("aaup2.dat.txt", widths = c(6, 31, 3, 5,
# rep(4, 3), 5,
# rep(4, 2), 5, rep(4, 5), 5))
library(readr)
dta <- read_fwf("aaup2.dat.txt", na = "*",
col_positions = fwf_widths(c(6, 31, 3, 5,
rep(4, 3), 5,
rep(4, 2), 5, rep(4, 5),
4)))
head(dta)
## # A tibble: 6 x 17
## X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
## <dbl> <chr> <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <dbl> <chr> <chr> <dbl>
## 1 1061 Alask~ AK IIB 454 382 362 382 567 485 471 487 6
## 2 1063 Univ.~ AK I 686 560 432 508 914 753 572 677 74
## 3 1065 Univ.~ AK IIA 533 494 329 415 716 663 442 559 9
## 4 11462 Univ.~ AK IIA 612 507 414 498 825 681 557 670 115
## 5 1002 Alaba~ AL IIA 442 369 310 350 530 444 376 423 59
## 6 1004 Unive~ AL IIA 441 385 310 388 542 473 383 477 57
## # ... with 4 more variables: X14 <dbl>, X15 <dbl>, X16 <dbl>, X17 <dbl>
嚴格來説應該標注每一欄的data type,比如學校是factor, 但data type不是這個問題的重點,我就沒有特別標注。