Я хочу использовать R вместо предварительной обработки данных, так как это упрощает проверку данных. Следуя предложению Шейна использовать gsub
, я думаю, что это настолько аккуратно, насколько я могу:
x <- read.csv("file.csv",header=TRUE,colClasses="character")
col2cvt <- 15:41
x[,col2cvt] <- lapply(x[,col2cvt],function(x){as.numeric(gsub(",", "", x))})
Не уверен, как правильно интерпретировать его read.csv
, но вы можете использовать gsub
для замены ","
] с помощью ""
, а затем преобразовать строку в numeric
, используя as.numeric
:
y <- c("1,200","20,000","100","12,111")
as.numeric(gsub(",", "", y))
# [1] 1200 20000 100 12111
Это было , также ранее ответили на R-Help (и в Q2 здесь ).
Кроме того, вы можете предварительно обработать файл, например, с помощью sed
в unix.
«Предварительная обработка» в R:
lines <- "www, rrr, 1,234, ttt \n rrr,zzz, 1,234,567,987, rrr"
Может использовать readLines
в textConnection
. Затем удалите только запятые, которые находятся между цифрами:
gsub("([0-9]+)\\,([0-9])", "\\1\\2", lines)
## [1] "www, rrr, 1234, ttt \n rrr,zzz, 1234567987, rrr"
Также полезно знать, но не имеет прямого отношения к этому вопросу, что запятые в качестве десятичных разделителей могут обрабатываться read.csv2 (автоматически) или read.table (с установкой ' dec'-параметр).
Редактировать: Позже я обнаружил, как использовать colClasses, создав новый класс. См .:
Как загрузить df с разделителем 1000 в R как числовой класс?
Я думаю, что предварительная обработка - лучший вариант. Вы можете использовать Notepad ++ , в котором есть опция замены регулярного выражения.
Например, если ваш файл был таким:
"1,234","123","1,234"
"234","123","1,234"
123,456,789
Тогда вы могли бы использовать регулярное выражение "([0- 9] +), ([0-9] +) "
и замените его на \ 1 \ 2
1234,"123",1234
"234","123",1234
123,456,789
Затем вы можете использовать x <- read.csv (file =" x. csv ", header = FALSE)
, чтобы прочитать файл.