Как считать данные, когда некоторые числа содержат запятые как тысячу разделителя?

113
задан Gregor 19 March 2019 в 02:46
поделиться

4 ответа

Я хочу использовать 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))})
16
ответ дан 24 November 2019 в 02:41
поделиться

Не уверен, как правильно интерпретировать его 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.

136
ответ дан 24 November 2019 в 02:41
поделиться

«Предварительная обработка» в 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 как числовой класс?

6
ответ дан 24 November 2019 в 02:41
поделиться

Я думаю, что предварительная обработка - лучший вариант. Вы можете использовать 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) , чтобы прочитать файл.

2
ответ дан 24 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: