2016-11-20 8 views
0

プログラミング、統計、およびRの新機能:Rに大量のデータセットをロードしようとしています。ASC形式です。私はread.tableからrgdalまで、read.ascに何時間も何も試みずに成功しませんでした。ファイルは1.5ギガバイトですので、テキストエディタで開くことができません。私は家庭教師を得て、彼は行ごとに読む必要があると言いました。この計画は最初の50件の記録を読み、それが成功したかどうかを確認することでした。私は空の列をいくつか残しています。ここに明らかな問題はありますか?すべての列名と文字番号を確認しました。作業ディレクトリとファイル名が正しいです。 142列}HCUP KIDへのインポートR

for(i in seq(1,numRows)) { 
    line = readLines(input,n=1) 


df$HOSP_KID[i] = substr(input, 1, 5) 
df$RECNUM[i] = substr(input, 6, 13) 
df$AGE[i] = substr(input, 14, 16)    
df$AGE_NEONATE[i] = substr(input, 17, 18)    
df$AMONTH[i] = substr(input, 19, 20) 
df$AWEEKEND[i] = substr(input, 21, 22)  
df$DIED[i] = substr(input, 23, 24)    
df$DISCWT[i] = substr(input, 25, 35)   
df$DISPUNIFORM[i] = substr(input, 36, 37) 
df$DQTR[i] = substr(input, 38, 39)  
df$DRG[i] = substr(input, 40, 42)   
df$DRG24[i] = substr(input, 43, 45) 
df$DRGVER[i] = substr(input, 46, 47)   
df$DRG_NoPOA[i] = substr(input, 48, 50) 
df$DX1[i] = substr(input, 51, 55)   
df$DX2[i] = substr(input, 56, 60)     
df$DX3[i] = substr(input, 61, 65)     
df$DX4[i] = substr(input, 66, 70)     

などのためhttp://www.hcup-us.ahrq.gov/db/nation/kid/tools/stats/FileSpecifications_KID_2012_Core.TXT

input = file("KID2012Core.asc","r") 
numRows = 50; 

df = data.frame(row=seq(1,numRows), 
HOSP_KID = NA,  
RECNUM = NA,   
AGE = NA,    
AGE_NEONATE = NA, 
AMONTH = NA, 
AWEEKEND = NA,  
DIED = NA,    
DISCWT = NA,    
DISPUNIFORM = NA, 
DQTR = NA,  
DRG = NA,    
DRG24 = NA,    
DRGVER = NA,   
DRG_NoPOA = NA, 
DX1 = NA,   
DX2 = NA,     
DX3 = NA,     
DX4 = NA,     
DX5 = NA,     
DX6 = NA,     
DX7 = NA,     
DX8 = NA,     
DX9 = NA,     
DX10 = NA,    
DX11 = NA,    
DX12 = NA,    
DX13 = NA,    
DX14 = NA, 
DX15 = NA, 
DX16 = NA, 
DX17 = NA, 
DX18 = NA, 
DX19 = NA, 
DX20 = NA, 
DX21 = NA, 
DX22 = NA, 
DX23 = NA, 
DX24 = NA, 
DX25 = NA, 
DXCCS1 = NA, 
DXCCS2 = NA, 
DXCCS3 = NA, 
DXCCS4 = NA, 

など:それはこのように行われていた理由を見ることができるようにここで

は、レコードレイアウトへのリンクです

ありがとうございます!

答えて

0

固定幅のファイルを使って作業していますが、これは読みやすい作業です。 read.fwfという目的のための基本機能はありますが、各列の幅とその間のスペースを数える必要がありますが、いくらか迷惑をかけることがあります。

readrパッケージには、その代替品である列指定を設定するためのいくつかのオプションがあります。read_fwf。この場合は、一番上の情報は、そのfwf_positionsヘルパー関数を使用するだけでなく、あなたが設定されます

library(readr) 

df <- read_fwf('http://www.hcup-us.ahrq.gov/db/nation/kid/tools/stats/FileSpecifications_KID_2012_Core.TXT', 
       fwf_positions(start = c(1, 5, 10, 27, 31, 61, 65, 69, 71, 76), 
          end = c(3, 8, 25, 29, 59, 63, 67, 69, 74, NA)), # use NA here for ragged column 
       skip = 20) 

df 
## # A tibble: 142 × 10 
##  X1 X2 X3 X4   X5 X6 X7 X8 X9 
## <chr> <int> <chr> <int>  <chr> <int> <int> <int> <chr> 
## 1 KID 2012 Core  1 HOSP_KID  1  5 NA Num 
## 2 KID 2012 Core  2  RECNUM  6 13 NA Num 
## 3 KID 2012 Core  3   AGE 14 16 NA Num 
## 4 KID 2012 Core  4 AGE_NEONATE 17 18 NA Num 
## 5 KID 2012 Core  5  AMONTH 19 20 NA Num 
## 6 KID 2012 Core  6 AWEEKEND 21 22 NA Num 
## 7 KID 2012 Core  7  DIED 23 24 NA Num 
## 8 KID 2012 Core  8  DISCWT 25 35  7 Num 
## 9 KID 2012 Core  9 DISPUNIFORM 36 37 NA Num 
## 10 KID 2012 Core 10  DQTR 38 39 NA Num 
## # ... with 132 more rows, and 1 more variables: X10 <chr> 

このファイルには、実際には別のファイルのためのコードブックですが、あなたはそれを読むためにX6X7の位置を使用することができます等価的に;あなたは全体のことを読んで計画している場合は、おそらく

df2 <- read_fwf('a_big_fwf.txt', 
       fwf_positions(start = df$X6, stop = df$X7, col_names = df$X5), 
       n_max = 50) # read first 50 lines 

のようなもの、あなたにもcol_typesを指定することもできます。情報はX9にありますが、readrの形式に変換する必要があります。詳細については、vignette('column-types', package = 'readr')を参照してください。

+0

私は、newbの合計を許して!これらの両方がデータフレームを作成しているようです...または、私のKIDCORE2012.ascファイルが読み込まれるべき場所である 'a_big_fwf.txt'ですか? – user7183863

+0

これは1.5Gbのものへのパスです。 'skip'やそれ以外のものでそれを微調整する必要があるかもしれません。データを見ることなく言うことは難しいです。 – alistaire

関連する問題