2014-04-29 84 views
2

單個字符我有一個​​輸入文件,它看起來像閱讀數作爲R

222222222224444444444444444477777777777723548464646 
233333333224444444444444444477776666667723545864646 

當我讀入與讀表命令ř認爲它是在1列中的單數r。然而,我需要每個單個字符的列

2 2 2 2 2 2 

... 

有沒有辦法在** ** R中做到這一點?

+0

該文件是否只包含一行數字? – jbaums

+0

有多行我編輯的文件..但每行shoudl被保留在一行,只是分裂到列 – user3419669

回答

2

首先,使用readLines來讀取數據可能最容易。然後,您可以使用strsplit輕鬆地將每個字符串(數字序列)分隔成單個數字。

下面是一個例子(我第一次將假數據寫出到一個臨時文件,f):

cat('222222222224444444444444444477777777777723548464646 
233333333224444444444444444477776666667723545864646', file=f <- tempfile()) 
d <- readLines(f) 
apply(do.call(rbind, strsplit(d, '')), 2, as.numeric) 

的最後一行代碼首先是分裂的文本文件轉換成單個字符的每一行,然後結合每個分隔的字符串變成data.frame(與do.call(rbind, ...))。最後,我們將它強制爲數字。如果您樂意將對象作爲字符數據離開,您可以將其保留爲do.call(rbind, strsplit(d, ''))

有關更多信息,請參閱?strplit

+0

它處理數據兩次(讀入,然後轉換),它不建議。 – PascalVKooten

+1

@PascalvKooten我同意@ping提供的'read.fwf'是更簡單的代碼,但是對於您複製粘貼的評論,爲什麼不建議?我想你會發現'read.fwf'無論如何都會使用'readLines'。 – jbaums

+0

我相信fortran使用這種設置。 Fortran閱讀速度也非常快。所以我假設自從R可以使用fortran之後,它可能會這樣做。還有,像readChar這樣的東西對嗎?我很確定這會變慢。 – PascalVKooten

-1

這會做詭計嗎?

unlist(strsplit("123", split="")) 
+0

這個例子會更好一些額外的解釋。 – Thom

+0

它處理數據兩次(讀入然後轉換),不建議。 – PascalVKooten

+0

不知道其他人,但我通常閱讀,分析,然後將數據轉換爲99%的時間需要的格式和結構。只有在這個過程穩定後,我才能正常合併或繞過讀入和/或轉換。 – WD11

3

可以把它作爲一個固定寬度的文件,並打開與read.fwf,給予width參數1 S中的相同長度的矢量作爲每行的字符的(最大)號:

read.fwf("yourFilename", rep(1, chars)) 

其中yourFilename是您的文件的名稱,而chars是每行的字符數(在您的示例中爲51)。

如果任何行比你設定的chars值更少的字符,他們也將獲得價值NA

+0

我認爲這是最好的答案,其他的只是後來處理數據的技巧。 – PascalVKooten

+0

這意味着該文件是固定寬度的文件...這是沒有說明任何地方? – WD11

+0

他們要求提供「每個單個字符的列」,這對我來說意味着「每列寬度爲1的固定寬度文件」。 – ping

2

我想補充的真的太意外了基準測試結果(我的道歉,jbaums):

對於剛2行提供:

Unit: microseconds 
    expr  min  lq median  uq  max neval 
jbaums() 265.131 290.2255 307.573 349.1005 1793.644 100 
    fwf() 1627.021 1700.5955 1791.578 1986.1865 4910.790 100 

對於3000行:

Unit: milliseconds 
    expr  min  lq median  uq  max neval 
jbaums() 33.50519 38.47324 41.33132 47.05635 85.21228 100 
    fwf() 671.91310 693.56500 707.83914 724.06571 799.11987 100 

這實際上意味着你不應該使用固定寬度格式,它實際上非常慢。