1

テキスト ファイルからデータ (つまり、read.table) を読み込むときに、レコード/観測/行の区切り記号を操作することは可能ですか? sep="" を使用してフィールド区切り記号を調整するのは簡単ですが、レコード区切り記号を行末文字から変更する方法は見つかりませんでした。

多くのエントリがキャリッジ リターンを含む長い文字列であるパイプ区切りのテキスト ファイルを読み込もうとしています。R はこれらの CR を行末として扱います。これにより、新しい行が誤って開始され、レコードの数とフィールドの順序が台無しになります。

CR の代わりに別の区切り文字を使用したいと考えています。結局のところ、各行は同じ文字列で始まるので、\nString のようなものを使用して真の行末を識別できれば、テーブルは正しくインポートされます。テキスト ファイルの 1 つがどのように見えるかを示す簡単な例を次に示します。

V1,V2,V3,V4
String,A,5,some text
String,B,2,more text and
more text
String,B,7,some different text
String,A,,

Rに次のように読み込む必要があります

V1      V2       V3      V4
String  A        5       some text
String  B        2       more text and more text
String  B        7       some different text
String  A        N/A     N/A

テキスト エディターでファイルを開き、読み込む前に検索/置換でファイルを消去することはできますが、R 内での体系的なソリューションがあればすばらしいでしょう。ご協力いただきありがとうございます。

4

2 に答える 2

3

それらを読み込んで、後で折りたたむことができます。g の値は、ヘッダーの場合は 0、次の行の場合は 1 (および、後続の行がある場合はそれに付随する行の場合) などになります。 与えるtapplyに従って行を折りたたみ、最後に行を再読み込みします。gL2

Lines <- "V1,V2,V3,V4
String,A,5,some text
String,B,2,more text and
more text
String,B,7,some different text
String,A,,"

L <- readLines(textConnection(Lines))

g <- cumsum(grepl("^String", L))
L2 <- tapply(L, g, paste, collapse = " ")

DF <- read.csv(text = L2, as.is = TRUE)
DF$V4[ DF$V4 == "" ] <- NA

これは与える:

> DF
      V1 V2 V3                      V4
1 String  A  5               some text
2 String  B  2 more text and more text
3 String  B  7     some different text
4 String  A NA                    <NA>
于 2013-04-20T03:22:48.187 に答える