2014-01-09 2 views
5

나는 수천 개의 점 분리 기호와 점 대신에 쉼표를 포함하는 전체 열의 열을 음수 구분 기호로 사용합니다. 숫자 열을 만들려고하면 모든 데이터가 손실됩니다.쉼표와 점 바꾸기 R

var1 <- c("50,0", "72,0", "960,0", "1.920,0", "50,0", "50,0", "960,0") 
df <- cbind(var1, var2 = as.numeric(gsub(".", "", as.character(var1)))) 

과 함께 상처 : 내가 잘못 뭐하는 거지

var1  var2 
[1,] "50,0" NA 
[2,] "72,0" NA 
[3,] "960,0" NA 
[4,] "1.920,0" NA 
[5,] "50,0" NA 
[6,] "50,0" NA 
[7,] "960,0" NA 

?

답변

25

정규 표현식에서 "."을 이스케이프 처리해야하며 숫자로 변환하려면 쉼표를 "."으로 대체해야합니다.

> as.numeric(gsub(",", ".", gsub("\\.", "", var1))) 
[1] 50 72 960 1920 50 50 960 
+1

''(var1, decimal.mark = '.')''형식의 쉼표를 점으로 변경할 수있는 또 다른 방법은 ODS 파일 (Locale Portuguese)을 읽는 것입니다. 장단점에 대해 말할 수는 없지만, 그것은 단지 측면 논평이었다. – PatrickT

+0

이 함수에 숫자 벡터를 전달하면 UseMethod ("filter_") 오류 : 클래스 "c ('double', 'numeric')"의 객체에 적용된 'filter_' – d8aninja

3

이런 것들에 대해 나는 이해하기 쉽기 때문에 scan()을 가장 좋아한다. 그냥

scan(text=var1, dec=",", sep=".") 

아아를 사용, 그것은 다른 한편으로 제압 seemes gsub(),보다 빠르다. 따라서 다른, 빠른, 옵션은 sub()입니다 :

as.numeric(sub(",", ".", sub(".", "", var1, fixed=TRUE), fixed=TRUE)) 

그리고 단지의 경우 : read.table("file.txt", dec=",", sep=".")

0

하는 당신은 사용할 수 있습니다 직접 파일에서 var1을 읽고있는 경우, 다만, 지정된 분리와 함께 읽어 기능 "type_convert", "readr"패키지에서.

library('readODS') 
library('tidyverse') 
data <- read_ods('mod-preditivo.ods', sheet=1,col_names = TRUE,range='a1:b30',col_types=NA) 
df <- type_convert(data,trim_ws=TRUE,col_types = cols(Pesos=col_integer(),Alturas=col_double()),locale = locale(decimal_mark = ",")) 
str(df)