2014-10-29 2 views
1

이 질문은 Convert factor to integerHow to convert a factor to an integer\numeric without a loss of information과 관련이 있지만 유형 강제 변환과 약간 다른 문제점이 있습니다. 레이블을 다시 지정한 후 인수를 숫자로 변환

두 전직 질문

는 요인이 명시 적으로 levels 레이블을 다시 지정하지 않고 numeric 또는 클래스 integer의 클래스의 기존의 벡터로 구성되는 경우를 다루는 한 것 같다. 나는 수준의 레이블을 다시 지정하는 경우

f <- factor(c("1","2","1","2")) 
as.numeric(levels(f))[f] 

반환

# [1] 1 2 1 2 

:하지만이 경우

f <- factor(c("1","2","1","2")) 
f <- factor(f, 
      levels = c(1, 2), 
      labels = c("a", "b")) 
as.numeric(levels(f))[f] 

을 나는 얻을 것이다

# [1] NA NA NA NA 
# Warning message: 
# NAs introduced by coercion 

반면, 617,451,515,
as.numeric(f) 

반환

# [1] 1 2 1 2 

다시 원래 값을 얻을 이러한 경우의 오른쪽 절차는 무엇입니까

? 그냥 as.numeric(f)일까요?

경우는 관련이 :

> sessionInfo() 
R version 3.1.2 RC (2014-10-28 r66890) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_IE.UTF-8  LC_NUMERIC=C 
[3] LC_TIME=en_IE.UTF-8  LC_COLLATE=en_IE.UTF-8 
[5] LC_MONETARY=en_IE.UTF-8 LC_MESSAGES=en_IE.UTF-8 
[7] LC_PAPER=en_IE.UTF-8  LC_NAME=C 
[9] LC_ADDRESS=C    LC_TELEPHONE=C 
[11] LC_MEASUREMENT=en_IE.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 
loaded via a namespace (and not attached): 
[1] tools_3.1.2 
+1

레이블을 다시 지정하면 원래 값이 영구히 손실됩니다. 'as.numeric()'은 항상 첫 번째 레벨에서는 1, 두 번째 레벨에서는 2를 반환합니다. 실제/원래 라벨이나 값이 무엇인지는 중요하지 않습니다. – MrFlick

+0

좋습니다. 나는 as.numeric() 함수를 사용하여 as.numeric()이 숫자 데이터 전용 프레임으로 누군가에게 내 데이터 프레임을 제출할 경우 혼란을 야기 할 원래 값을 어떻게 든 반환 할 것 같았습니다. 모든 (요소) 열에. –

답변

0

원래 수준과 기본 요소/정수 인코딩 사이의 정확한 대응이 있음을 확실성에 대해 알고 있다면, 당신은 as.numeric 사용할 수 있습니다 (F) . 하지만 ... 원래 벡터

f <- factor(c("2","3","2","3")) 

을했다 그리고 당신은 다음 as.numeric (F) 잘못된 결과를 줄 것이다, 알파 값으로 레벨 라벨을 변경 한 경우. 요소 인코딩은 항상 1L으로 시작됩니다.