私はread.csvまたはread.csv2を使ってRにデータを読み込むことができます。しかし、私が遭遇した問題は、私のセパレータが1文字の代わりに複数バイトの文字列であることです。私はこれにどのように対処できますか?複数バイトの区切り文字でGNU Rにテキストファイルを読み込む方法は?
答えて
例データを入力すると役立ちます。しかし、あなたは次のものをあなたのニーズに適応させることができるかもしれません。
私は、次を含む単なるテキストファイルである例のデータファイル、作成された:私は「のtest.CSV」としてそれを保存し
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
を。分離文字は 'sep'文字列です。私はread.csv()
がsep
のためのただ1文字を受け入れるscan()
を使用すると思う。これを回避するには、次の点を考慮してください。
dat <- readLines('test.csv')
dat <- gsub("sep", " ", dat)
dat <- textConnection(dat)
dat <- read.table(dat)
readLines()
だけで行を読み込みgsub
単一' '
ための複数文字の別離の文字列を置換したり、あなたのデータのために便利であるものは何でも。その後、textConnection()
とread.data()
はすべてを便利に戻します。小規模なデータセットの場合は、これが問題ありません。データが非常に大きい場合は、AWKのようなもので前処理を行い、複数文字の分離文字列を置き換えることを検討してください。上記はhttp://tolstoy.newcastle.edu.au/R/e4/help/08/04/9296.htmlです。あなたがあなたのデータにスペースがある場合
更新 、あなたのコメントについては、別の交換用セパレーターを使用しています。 test.csv
の変更を検討:
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
次に、以下の機能を:
readMulti <- function(x, sep, replace, as.is = T)
{
dat <- readLines(x)
dat <- gsub(sep, replace, dat)
dat <- textConnection(dat)
dat <- read.table(dat, sep = replace, as.is = as.is)
return(dat)
}
試してみてください。ここでは
readMulti('test.csv', sep = "sep", replace = "\t", as.is = T)
は、あなたがタブ(\t
)と、元の区切りを置き換えます。 as.is
はread.table()
に渡され、文字列の読み込みを防止しますが、それはあなたの呼び出しです。あなたがデータ内でより複雑なホワイトスペースを持っている場合は、AWKで役立つ、または前処理read.table()
でquote
引数を見つけるかもしれない、perlの、などcrippledlambdaのstrsplit()
と同様の
何かが中程度の大きさのデータのための最も可能性が高いと等価です。パフォーマンスが問題になる場合は、両方を試して、どちらが効果的かを確認してください。
この場合、textConnection(txt)
をファイル名に置き換えることができますが、本質的にはstrsplit
を中心にコードまたは関数を作成することができます。ここで私はあなたがヘッダ行を持っていると仮定していますが、あなたはもちろんheader
引数を定義して、以下の機能に基づいて、データフレームの作成を一般与えることができます:
> read.multisep <- function(File,sep) {
+ Lines <- readLines(File)
+ Matrix <- do.call(rbind,strsplit(Lines,sep,fixed=TRUE))
+ DataFrame <- structure(data.frame(Matrix[-1,]),names=Matrix[1,]) ## assuming header is present
+ DataFrame[] <- lapply(DataFrame,type.convert) ## automatically convert modes
+ DataFrame
+ }
>
> example <- "a#*&b#*&c
+ 1#*&2#*&3
+ 4#*&5#*&6"
>
> read.multisep(textConnection(example),sep="#*&")
a b c
1 1 2 3
2 4 5 6
read.multisepは私のためにうまく動作します〜!ありがとう@jthetzel – RobinMin
- 1. 複数の文字区切り文字を含むテキストファイルをRのリストに読み込む
- 2. 同じ区切り文字なしでrの倍数のテキストファイルを読む
- 3. 1行に複数の区切り文字を含むファイルを読む方法
- 4. スペース区切りのファイルをパンダに読み込む方法は?
- 5. 区切り文字でテキストファイルのフィールドを区切る方法
- 6. crlfの行区切り文字でBIGテキストファイルを読む最良の方法
- 7. 複数の区切り文字で区切る文字列
- 8. uto16テキストファイルをgolangの文字列に読み込む方法は?
- 9. Javaで複数の区切り文字を含むファイル行を読み取る
- 10. コンマで区切られたテキストファイルを配列に読み込む
- 11. 複数行のテキストファイルを読み込むJavaでは、最後の文字の後に各行の末尾に区切り文字を追加します。
- 12. 複数区切りのcsvファイルからデータを読み込み、Rで
- 13. テキストファイルから文字を読み込む方法は?
- 14. 複数の区切り文字でパンダのtxtファイルを読むには?
- 15. テキストファイルから文字を読み込む
- 16. 複数の区切り文字を含むファイルをC++で読む
- 17. 複数区切り文字で区切られた文字列の複数の変数への分割R
- 18. C++複数の区切り文字を含むファイルから行列を読み込みます
- 19. タブ区切りファイルからテーブルデータを読み込む方法C++
- 20. 複数のテキストファイルを複数のフォルダに読み込む方法は?
- 21. フィールドの区切り文字をctrl A、行区切りを\ nとしてPythonに読み込む
- 22. コンマ区切り文字列を読む
- 23. 複数の区切り文字を使用した区切り
- 24. コンマ区切りファイルを整数配列に読み込む
- 25. 複数のカンマ区切り文字列を文字列から読み取る
- 26. データがテーブルにないときにRにテキストファイルを読み込む方法
- 27. fread - 文字列内の複数の区切り文字
- 28. C#カンマ区切りテキストファイルからWindowsフォームへの読み込み
- 29. Java - スキャナ:レコードの行をパイプで区切って読み込む|区切り文字として
- 30. HTMLでテキストファイルを読み込む方法
あなたのマルチバイト文字列は何ですか? – jthetzel
もっと一般的なread.table()とsep引数を見ると、複数バイトの文字列を使うことができると思います。 – mweylandt
@myylandt 'read.table()'の 'sep'は1バイトしか受け付けません(' scan() 'と同じです)。 – jthetzel