2013-05-02 4 views
4

다음은 현재 값 (0, 0, 8,5, 3)을 변경하지 않고 인자 형식에서 열 "V2"를 숫자 형식으로 변환하려는 데이터 프레임 df1입니다.값을 변경하지 않고 요소 형식을 숫자 형식으로 변환하는 방법은 무엇입니까?

DF1 =

   V1 V2 V3  X2 X3 
4470 2010-03-28 0 A 21.53675 0 
4471 2010-03-29 0 A 19.21611 0 
4472 2010-03-30 8,5 A 21.54541 0 
4473 2010-03-31 3 A  NA NA 

열 "V2"는 요소 형식이기 때문에 나는 첫 번째 문자 형식으로 변환 : df1[,2]=as.character(df1[,2])

가 그럼 난 숫자 형식으로 "V2"를 변환하려고 :

df1[,2]=as.numeric(df1[,2])

이 R 메시지로 연결 :

Warning message: NAs introduced by coercion

그리고 df[3,2] 대신 "8,5"나머지의 "NA"로 변경되었습니다 아래 dataframe ..

   V1 V2 V3  X2 X3 
4470 2010-03-28 0 A 21.53675 0 
4471 2010-03-29 0 A 19.21611 0 
4472 2010-03-30 NA A 21.54541 0 
4473 2010-03-31 3 A  NA NA 

그것은 8,5가 있다는 사실과해야 할 수도 있습니다 정수가 아니야. 아직도 나는이 문제를 해결하는 방법을 모른다. 도움을 많이 주시면 감사하겠습니다!

+1

여기서 문제는 십진수 분리가 점 대신 쉼표로 분리된다는 것입니다. – juba

답변

7

쉼표를 R의 소수를 나타내는 점으로 바꿉니다. 그렇지 않으면 R은 문자라고 생각하고 값을 NA로 강제 변환합니다.

그런 다음, 추출 값 :

df[3,2] <- 8.5 

당신은해야한다 :

as.numeric(levels(df1[,2])[df[,2]]) 

(보정에 대한 SimonO101 @ 감사)

+0

@ SimonO101 고마워, 나는 처음에 'fac' 벡터에서 테스트 했으므로 놓쳤다. –

+0

당신을위한 Thx입니다. R에서 쉼표를 점으로 어떻게 변경합니까? 이 데이터 프레임은 실제로 훨씬 더 큰 데이터 프레임 워크의 일부입니다. 손으로 그것을 할 수 없습니다. – MB123

+0

MB123 : @ SimonO101이 이미 게시했습니다. –

9

데이터에 쉼표를 대체하는이 시도 :

fac<- c("0" , "0" , "1,5" , "0" , "0" , "8") 
#[1] "0" "0" "1,5" "0" "0" "8" 
fac <- as.numeric(sub(",", ".", fac)) 
#[1] 0.0 0.0 1.5 0.0 0.0 8.0 

더 일반적 요인 표현보다는 자신의 기본 값으로 요소를 변환 :

그러나
fac <- as.factor(fac) 
as.numeric(fac) 
#[1] 1 1 2 1 1 3 
as.numeric(as.character(fac)) 
#[1] 0.0 0.0 1.5 0.0 0.0 8.0 

, 이것은의 표준 방법입니다 원래 값으로 변환

as.numeric(levels(fac))[fac] 

도움말 페이지에서 ?as.factor

특히 요인에 적용되는 숫자는 의미가 없으며 암시 적 강제 변환에 의해 발생할 수 있습니다. 인수 f를 근본적인 숫자 값으로 변환하려면 as.numeric (levels (f)) [f]가 as.numeric (as.character (f))보다 약간 더 효율적으로 권장됩니다.

+0

안녕하세요 @ SimonO101은 데이터 프레임에 쉼표가있는 OP가 두 개 이상의 데이터 요소를 가지고있는 경우'gsub'가 대안으로 사용됩니까? –

+0

@ TahnoonPasha 'fac <- c ("0", "0", "1,5", "0,6", "0", "8")'에 시도하십시오. 여기서'sub'는 벡터의 각 요소에서 작동합니다. 각 숫자의 쉼표가 하나만 있으면 ok입니다. 나는 그들이 하나 이상의 쉼표를 가지고 있다고 가정하고있다. 두 개 이상의 값을 가지고 있다면'gsub'를 사용하는 것이 도움이되지 않을 것이기 때문이다. 어쨌든 NA로 변환됩니다. :-) –

0

당신이 문자로 변환 한 후 다음 코드 줄을 추가 문자를 숫자로 변환 할 수 있어야합니다. R의 기본 소수점 구분 기호는 .이 아니기 때문에 ,이 아니라 해당 단계가 없으면 값이 NA로 대체됩니다.

관련 문제