單個字符我有一個輸入文件,它看起來像閱讀數作爲R
222222222224444444444444444477777777777723548464646
233333333224444444444444444477776666667723545864646
當我讀入與讀表命令ř認爲它是在1列中的單數r。然而,我需要每個單個字符的列
2 2 2 2 2 2
...
有沒有辦法在** ** R中做到這一點?
單個字符我有一個輸入文件,它看起來像閱讀數作爲R
222222222224444444444444444477777777777723548464646
233333333224444444444444444477776666667723545864646
當我讀入與讀表命令ř認爲它是在1列中的單數r。然而,我需要每個單個字符的列
2 2 2 2 2 2
...
有沒有辦法在** ** R中做到這一點?
首先,使用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
。
它處理數據兩次(讀入,然後轉換),它不建議。 – PascalVKooten
@PascalvKooten我同意@ping提供的'read.fwf'是更簡單的代碼,但是對於您複製粘貼的評論,爲什麼不建議?我想你會發現'read.fwf'無論如何都會使用'readLines'。 – jbaums
我相信fortran使用這種設置。 Fortran閱讀速度也非常快。所以我假設自從R可以使用fortran之後,它可能會這樣做。還有,像readChar這樣的東西對嗎?我很確定這會變慢。 – PascalVKooten
這會做詭計嗎?
unlist(strsplit("123", split=""))
這個例子會更好一些額外的解釋。 – Thom
它處理數據兩次(讀入然後轉換),不建議。 – PascalVKooten
不知道其他人,但我通常閱讀,分析,然後將數據轉換爲99%的時間需要的格式和結構。只有在這個過程穩定後,我才能正常合併或繞過讀入和/或轉換。 – WD11
可以把它作爲一個固定寬度的文件,並打開與read.fwf
,給予width
參數1
S中的相同長度的矢量作爲每行的字符的(最大)號:
read.fwf("yourFilename", rep(1, chars))
其中yourFilename
是您的文件的名稱,而chars
是每行的字符數(在您的示例中爲51)。
如果任何行比你設定的chars
值更少的字符,他們也將獲得價值NA
我認爲這是最好的答案,其他的只是後來處理數據的技巧。 – PascalVKooten
這意味着該文件是固定寬度的文件...這是沒有說明任何地方? – WD11
他們要求提供「每個單個字符的列」,這對我來說意味着「每列寬度爲1的固定寬度文件」。 – ping
我想補充的真的太意外了基準測試結果(我的道歉,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
這實際上意味着你不應該使用固定寬度格式,它實際上非常慢。
該文件是否只包含一行數字? – jbaums
有多行我編輯的文件..但每行shoudl被保留在一行,只是分裂到列 – user3419669