2017-01-12 3 views
2

私は6列のcsvファイルを持ち、その1列にカンマで区切られたテキストがあります(例:BOLT、RD HD SQ SHORT NECK、METRIC)。CSVファイルを列にカンマで読み取る

このファイルをRで読むと、この列からオーバーフローし、その後データが新しい行に移動します。私が貼り付けています下

数行

014003051906、ETN5080、0450、ボルトKIT上軸5 SPEED、1.000、F 014003051906、ETN5967、0460 WITH、SENSOR SENSOR FH BACKSHAFT SPEED、1.000、F 014003051906、ETN64267、0470、TILT UNIT SENSOR、1.000、F

014003065376,03M7184、0020ボルト - M 8.0 X 1.250 X 20.0 - 8.8-亜鉛、4.000、G 014003065376,03M7386、0090ボルト、RD HD SQショートネック、メトリック、18.000、G 014003065376,14M7296,0090、NUT、METRIC、HEX FLANGE、14.000、G

最後の2行は問題のある場所です。 「NUT、METRIC、HEX FLANGE」は1つの変数の下に来るはずです。

どうすれば解決できますか?

+4

どのようにデータにアクセスしましたか? (ExcelからCSV形式で保存されていますか?)最適な解決策は、データを引用するか、別の区切り文字を使用する形式でデータを保存するよう要求することです。 – Benjamin

+0

@ベンジャミン私は同じことを考えていました。しかし残念ながら、これが私たちが持つ唯一の情報源です。 – darkage

+0

あなたは正規表現で行くことができます –

答えて

8
data <- readLines(con = textConnection("014003051906,ETN5080 ,0450,BOLT KIT UPPER SHAFT WITH 5 SPEED,1.000,F 
014003051906,ETN5967 ,0460,SENSOR SENSOR FH BACKSHAFT SPEED,1.000,F 
014003051906,ETN64267 ,0470,TILT UNIT SENSOR,1.000,F 

014003065376,03M7184 ,0020,BOLT - M 8.0 X 1.250 X 20.0 - 8.8-Zinc,4.000,G 
014003065376,03M7386 ,0090,BOLT, RD HD SQ SHORT NECK, METRIC,18.000,G 
014003065376,14M7296 ,0090,NUT, METRIC, HEX FLANGE,14.000,G")) 

pattern <- "^([^,]*),([^,]*),([^,]*),(.*),([^,]*),([^,]*)$" 

library(stringr) 
str_match(data, pattern)[, - 1] 
#  [,1]   [,2]  [,3] [,4]          [,5]  [,6] 
# [1,] "014003051906" "ETN5080 " "0450" "BOLT KIT UPPER SHAFT WITH 5 SPEED"  "1.000" "F" 
# [2,] "014003051906" "ETN5967 " "0460" "SENSOR SENSOR FH BACKSHAFT SPEED"  "1.000" "F" 
# [3,] "014003051906" "ETN64267 " "0470" "TILT UNIT SENSOR"      "1.000" "F" 
# [4,] NA    NA   NA  NA          NA  NA 
# [5,] "014003065376" "03M7184 " "0020" "BOLT - M 8.0 X 1.250 X 20.0 - 8.8-Zinc" "4.000" "G" 
# [6,] "014003065376" "03M7386 " "0090" "BOLT, RD HD SQ SHORT NECK, METRIC"  "18.000" "G" 
# [7,] "014003065376" "14M7296 " "0090" "NUT, METRIC, HEX FLANGE"    "14.000" "G" 

編集:初心者のための
正規表現の説明、平野言葉でそう不正確許してください:

  • 初期^と端末$を開始し、文字列の終わりを意味します。
  • 括弧はグループ分けするためのグループです(str_match()が抽出するグループ)。
  • .は任意の文字を意味し、.*は任意の文字を意味します。
  • [^,]は、カンマではない任意の文字を意味します。まとめる場合

、それが意味する:start of string - substring without a commaからcomma(繰り返し3回) - substring possibly containing commasからcomma - substring without a commaからcomma - substring without a commaからend of string、およびのみ括弧グループが抽出されます。

+1

アイデアを広げて、4番目のフィールドの周りにカンマを追加して、 'read.csv'を呼ぶことができます:' read.csv(text = gsub( "^([^、] *、[^、] *、[^、] * )、)(。*)(、[^、] *、[^、] *)$ "、" \\ 1 \ "\\ 2 \" \\ 3 "、データ)、ヘッダー= FALSE) ' – nicola

+1

@Apom私は正規表現に新しいです、あなたは正規表現の部分を説明できますか? – darkage

+0

@darkage私の編集を参照 –

関連する問題