Это определяет линию с дополнительными полями с помощью countfields, и затем использует sub
для удаления запятых между двумя октоторпами («#»). Учитывая размер набора данных, я предполагаю, что будет больше проблем, и вы должны найти, что count.fields
будет очень полезен (см. ниже):
> Lines
[1] "1,09/29/1951,F,N,22 MAIN STREET AVE,APT 3,SEATTLE,WA,98102-3053,00920670025\n2,09/28/1950,F,N,13354 A STREET,APT 2,BURLINGTON,VT,10101,02510070025\n3,10/18/1949,M,N,600 CENTRE STREET,BLDG #5,#104,SPRINGFIELD,IL,01010,02141650025\n4,10/18/1955,M,N,5 KELLY AVENUE,,CITY,XI,10101,02141650025"
> myLines <- readLines(textConnection(Lines))
> myLines
[1] "1,09/29/1951,F,N,22 MAIN STREET AVE,APT 3,SEATTLE,WA,98102-3053,00920670025"
[2] "2,09/28/1950,F,N,13354 A STREET,APT 2,BURLINGTON,VT,10101,02510070025"
[3] "3,10/18/1949,M,N,600 CENTRE STREET,BLDG #5,#104,SPRINGFIELD,IL,01010,02141650025"
[4] "4,10/18/1955,M,N,5 KELLY AVENUE,,CITY,XI,10101,02141650025"
> myLines[ count.fields(textConnection(myLines),sep=",", comment.char="") >10] <- sub("(#\\d+)(\\,)#", "\\1 &", myLines[ count.fields(textConnection(myLines),sep=",", comment.char="") >10])
> myLines
[1] "1,09/29/1951,F,N,22 MAIN STREET AVE,APT 3,SEATTLE,WA,98102-3053,00920670025"
[2] "2,09/28/1950,F,N,13354 A STREET,APT 2,BURLINGTON,VT,10101,02510070025"
[3] "3,10/18/1949,M,N,600 CENTRE STREET,BLDG #5 &104,SPRINGFIELD,IL,01010,02141650025"
[4] "4,10/18/1955,M,N,5 KELLY AVENUE,,CITY,XI,10101,02141650025"
> read.csv(text=myLines, comment.char="",header=FALSE)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 09/29/1951 F N 22 MAIN STREET AVE APT 3 SEATTLE WA 98102-3053 920670025
2 2 09/28/1950 F N 13354 A STREET APT 2 BURLINGTON VT 10101 2510070025
3 3 10/18/1949 M N 600 CENTRE STREET BLDG #5 &104 SPRINGFIELD IL 01010 2141650025
4 4 10/18/1955 M N 5 KELLY AVENUE CITY XI 10101 2141650025
Я предлагаю использовать table(count.fields(filename, sep=",", comment.char="")))
, чтобы лучше оценить масштаб проблемы. Я подозреваю, что вы только что нашли первого из многих.
Если это текстовый файл, почему вы используете 'read.csv()', если вы хотите быстро читать большие файлы, попробуйте использовать 'fread (FILE, sep =", ")' из 'library (data.table) '... если это файл .csv, тогда попробуйте использовать' read.csv2() '@afleishman – Rime
. Отметить, что вы нажимаете на свой вход, это« # ». По умолчанию это «comment.char». Если посторонние запятые всегда окружены октоторпами, может быть решение. Я знаю, как идентифицировать строки с избыточным количеством запятых. Почему бы вам не заняться еще более детективной работой и более подробно описать проблему? –
У меня нет голоса, чтобы закрыть, в частности, почему. Может быть, кто-то случайно ударил по голосу, чтобы закрыть? –