2016-03-21 10 views
0

次のデータを持つテーブルを作成する必要があります(インポートにCSVを使用したくありません)。Rテキスト接続

toread<-"DomicLabProv cluster 
BUENOS AIRES 1 
CHUBUT 1 
FORMOSA 1 
LA PAMPA 1 
SAN JUAN 1 
CAPITAL FEDERAL 1 
MISIONES 1 
SAN LUIS 1 
SANTA FE 1 
ENTRE RIOS 2 
JUJUY 2 
LA RIOJA 2 
SANTIAGO DEL ESTERO 2 
CHACO 2 
CORDOBA 2 
CORRIENTES 2 
SALTA 2 
TIERRA DEL FUEGO 2 
TUCUMAN 2 
CATAMARCA 3 
MENDOZA 3 
NEUQUEN 3 
RIO NEGRO 3 
SANTA CRUZ 3 
" 

ご覧のとおり、1番目と2番目のフィールドはタブで区切られています。 私がしようとすると:スキャンに

エラー:

read.table(textConnection(toread), header = TRUE) 

私は、次のエラーメッセージを指定を取得します。 2行目には2つの要素がありません。

これは、DomicLabProvの名前に空白が含まれているという事実と関連していると思います。たとえば、「Buenos Aires」です。この問題を克服する方法はありますか?私はそれらがスペースバーによって行われたスペースであり、フィールド間にあるスペースはタブキーによって行われることを意味します。

ありがとうございました。少し正規表現で

+1

'、'して区切るスペースを交換し、 read.tableに 'sep = '、''を追加してください。 – HubertL

答えて

3

textConnectionは不要です。代わりにtextオプションで機能read.tableに文字列を渡す:

read.delim(text = toread) 

read.delimread.tableと同じですが、ヘッダーを持つに区切り文字、およびデフォルトとしてタブを使用しています。)

これが動作するテキスト場合タブ文字'\t'によって実際に区切られています。そうでない場合は、スペースを含む「LA PAMPA」のようなフィールドを分割しないように注意しながら、列を手動で分割する必要があるため、もう少し作業が必要です。これは厄介であり、適切な形式のデータを最初から始めることによって避けられます。あなたの特定のケースで、我々は2番目の列が数値であるという情報を使用することができます(ただし、我々が最初にそれが適合していないので、ヘッダを削除する必要があります):

header = strsplit(sub('\n.*', '', toread), ' +')[[1]] 
no_header = sub('^.*?\n', '', toread) 
no_header = gsub(' +(?=\\d)', '\t', no_header, perl = TRUE) 
data = read.delim(text = no_header, header = FALSE) 
colnames(data) = header 
+0

ありがとうございますが、結果は列を分割しません。私は得る:DomicLabProvcluster 1 BUENOS AIRES1 2 CHUBUT1 – GabyLP

+0

@GabyLPあなたのデータは、主張されているように実際にはタブで区切られていません。しかし、私の答えはこれに対処しています。あなたのデータをコピーしてRに貼り付け、2番目のコードを実行することは間違いなく機能します。 –

+0

あなたは正しいです。私はExcelのスプレッドシートからデータをコピーして、それをタブで区切ってコピーしたとします。私は、各スペースを消去し、タブキーを押して、それでもまだ間違った結果を得たことを確認しました。私はここからコピーして働きました。理由を説明できません。たぶん誰かがテキストを編集しました。 – GabyLP

-1

、我々はCSV形式に変換することができます

read.csv(text = sub('\\s+(\\S+$)', ',\\1', readLines(textConnection(toread)))) 
#   DomicLabProv cluster 
# 1   BUENOS AIRES  1 
# 2    CHUBUT  1 
# 3    FORMOSA  1 
# 4    LA PAMPA  1 
# 5    SAN JUAN  1 
# 6  CAPITAL FEDERAL  1 
# 7    MISIONES  1 
# 8    SAN LUIS  1 
# 9    SANTA FE  1 
# 10   ENTRE RIOS  2 
# 11    JUJUY  2 
# 12   LA RIOJA  2 
# 13 SANTIAGO DEL ESTERO  2 
# 14    CHACO  2 
# 15    CORDOBA  2 
# 16   CORRIENTES  2 
# 17    SALTA  2 
# 18 TIERRA DEL FUEGO  2 
# 19    TUCUMAN  2 
# 20   CATAMARCA  3 
# 21    MENDOZA  3 
# 22    NEUQUEN  3 
# 23   RIO NEGRO  3 
# 24   SANTA CRUZ  3 

subが続く空白文字\\S+何でもで構成され、それは(...)をキャプチャグループ、続く空白文字\\s+を探します行の末尾$。カンマ,の後にキャプチャされたグループ\\1が続きます。

関連する問題