R資料處理-讀取固定欄寬格式的文字資料檔(.dat) [Stack Overflow練題001]

更新 發佈閱讀 4 分鐘
若需要分析的資料是固定欄寬格式(Fixed Width Format, fwf)的純文字檔,需要透過ddf或sps工作檔正確指定欄位分隔、變項名稱,請看今天的練習。

資料處理的第一步是讀取資料檔,而資料檔格式五花八門,較常見幾種的有.sav、.dta、.xlsx、.csv、.dat等。

其中SPSS與Stata等套裝軟體提供的資料檔格式(即.sav、.dta)逐漸變得更加熱門,因為可以直接設定variable labels、value labels、欄位類型等,使用者匯入資料檔即可取得所有資訊,不需要另外使用資料設定工作檔或codebook。雖然檔案容量較大與處理費時是其缺點,但當代電腦硬碟容量動輒數百GB甚至數TB,效能也愈發強悍,對一般使用者而言缺點就變得微不足道了。

然而,現在仍可以看到一些資料是以.dat等純文字檔格式提供,主要是以下兩種:

  1. 行之有年的調查資料庫:早期以純文字檔釋出資料,後期雖然科技進步,但為保持一致性或工作流程已經固定,就會繼續以文字檔釋出。
  2. 極為大量的資料:數千甚至上萬筆的資料,容量都不會造成現代電腦的負擔,但部分特殊資料庫的資料量以百萬筆計,單一資料檔即可能達數十GB,使用套裝軟體的檔案格式會需要很多時間讀取。

今天在Stack Overflow看到的提問是使用者想匯入美國勞工統計局執行的Current Population Survey資料,提問原帖在此

若用記事本開啟.dat檔,內容大致是這樣:

raw-image

用notepad++開啟CPS的.dat資料檔


視覺上來說,會自然以為這是以空格(space)分隔的資料檔,所以提問者一開始是使用read.delim這個函數匯入資料,read.delim是用來讀取分隔符號格式(Delimited Format)的資料檔,只要正確指定分隔符號,就能將用分隔符號隔開的資料讀取成不同欄位,例如.csv(逗號分隔)。

以這個資料檔來說這樣的處理並不正確。查看CPS的相關說明即可得知資料是固定欄寬格式,取前幾個變項為例:

hrhhid     1-15 (a)
hrmonth 16-17
hryear4 18-21
hurespli 22-23
hufinal 24-26

這表示第1~15個字元是第一個變項(hrhhid),第16~17字元是第二個變項(hrmonth),注意這邊的字元包含空格。因此正確的前5個變項是以下圖中的灰線劃分。


raw-image

正確劃分前5個欄位的.dat檔


明白問題出在哪後,接下來只要正確指派每個欄位佔據的字元就可以了。然而,查看技術說明文件並手動輸入是相當費時的工作。幸好CPS有提供套裝軟體的資料設定工作檔。雖然是提供給SAS、SPSS、STATA使用者讀取資料時直接使用的,但R中有套件可以直接讀取這些工作檔,並在R中進行相同的處理。

library(asciiSetupReader)

cps2004may <- read_ascii_setup(
data = dat_path,
setup_file = sps_path
)

其中dat_path是.dat檔存放路徑,setup_file則是.sps檔(資料設定工作檔)存放路徑。如此便能正確讀取有提供資料設定工作檔的fwf .dat了。


如果沒有提供資料設定工作檔怎麼辦?那就只能參考技術說明文件逐一指派每個欄位的寬度了。不過在原帖中也有人分享如何透過程式處理技術說明文件,一次性整理好每個欄位的寬度,若大家有興趣將來再做個分析講解吧!

留言
avatar-img
窄視野的生活觀察
0會員
3內容數
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
若需要分析的資料是固定欄寬格式(Fixed Width Format, fwf)的純文字檔,需要透過ddf或sps工作檔正確指定欄位分隔、變項名稱,請看今天的練習。
Thumbnail
若需要分析的資料是固定欄寬格式(Fixed Width Format, fwf)的純文字檔,需要透過ddf或sps工作檔正確指定欄位分隔、變項名稱,請看今天的練習。
Thumbnail
有時候在其他檔案轉換成SPSS檔時,可能出現在一個變項內,以特定符號將不同數字分開的(如下圖,第三行4,7,8),這時無法用SPSS進行有效分析。本文將說明如何使用SPSS將特定符號分開的數字轉換成不同變項,光看文字可能太過抽象,請看圖文教學。
Thumbnail
有時候在其他檔案轉換成SPSS檔時,可能出現在一個變項內,以特定符號將不同數字分開的(如下圖,第三行4,7,8),這時無法用SPSS進行有效分析。本文將說明如何使用SPSS將特定符號分開的數字轉換成不同變項,光看文字可能太過抽象,請看圖文教學。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
本文探討了在使用 pandas 處理資料時應注意的幾個關鍵點,以及如何減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。主要包括Pandas 資料處理深入解析,尋找CSV之外的數據儲存方案,以及優化資料處理策略。
Thumbnail
本文探討了在使用 pandas 處理資料時應注意的幾個關鍵點,以及如何減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。主要包括Pandas 資料處理深入解析,尋找CSV之外的數據儲存方案,以及優化資料處理策略。
Thumbnail
題目敘述 題目會給定兩個pandas DataFrame作為輸入,要求我們將兩張資料表,依照原有的順序串接在一起。 題目的原文敘述 測試範例 Example 1: Input: df1 +------------+---------+-----+ | student_id | name
Thumbnail
題目敘述 題目會給定兩個pandas DataFrame作為輸入,要求我們將兩張資料表,依照原有的順序串接在一起。 題目的原文敘述 測試範例 Example 1: Input: df1 +------------+---------+-----+ | student_id | name
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,將欄位grade的資料型別從原本的float變更為int整數型別。 題目的原文敘述 測試範例 Example 1: Input: DataFrame students: +------------
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們在原有的資料表上,將欄位grade的資料型別從原本的float變更為int整數型別。 題目的原文敘述 測試範例 Example 1: Input: DataFrame students: +------------
Thumbnail
本文介紹了如何使用 Excel VBA 來解決 CSV 檔案原始資料( 左補零 ) 被截斷的問題。
Thumbnail
本文介紹了如何使用 Excel VBA 來解決 CSV 檔案原始資料( 左補零 ) 被截斷的問題。
Thumbnail
先來看一下成果展示 今天有粉絲提出一個問題,一個儲存格中有很多行資料,要依據換行符號將所有內容橫向展開。 這個需求有許多種解法 函數解: =TRIM(MID(SUBSTITUTE(B5,CHAR(10),REPT(" ",100)),SEQUENCE(,10,1,100),100)) 對於函數很熟悉
Thumbnail
先來看一下成果展示 今天有粉絲提出一個問題,一個儲存格中有很多行資料,要依據換行符號將所有內容橫向展開。 這個需求有許多種解法 函數解: =TRIM(MID(SUBSTITUTE(B5,CHAR(10),REPT(" ",100)),SEQUENCE(,10,1,100),100)) 對於函數很熟悉
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News