2011-09-30 3 views
27

가능한 복제를 (as.numeric은() 작동하지 않는 것) 다음 약
R - How to convert a factor to an integer\numeric in R without a loss of information정보 R의 손실없이 숫자에 요소를 변환

다음 사실. 내가 레벨 4, 8, 1 요인을 변환 할 때 숫자() 함수는 내 관심

> blah<-c("4","8","10","15") 
> blah 
[1] "4" "8" "10" "15" 
> blah.new<-as.factor(blah) 
> blah.new 
[1] 4 8 10 15 
Levels: 10 15 4 8 
> blah.new1<-as.numeric(blah.new) 
> blah.new1 
[1] 3 4 1 2 

에 가져되었습니다 0, 15를 as.numeric()을 사용하여 정량 변수에 대입하면 모든 숫자가 순위로 변환되고 원래 값은 손실됩니다.

레벨 '10, 15, 4, 8'인 'blah.new'벡터를 가져 와서 숫자 값 10, 15, 4 및 8로 변환하려면 어떻게해야합니까?

감사합니다 (이 문제 때문에 정량적 변수가 read.table 읽을 수있는 데이터 세트의 생겨났다() 요소가 될 수 있습니다) !!

는 ***** 업데이트 : 나는이 기능에 인수를 변환하는 것을 말하는가() as.numeric에 대한 설명서에 어디에 궁금 그러나 ******

blah.new1<-as.numeric(as.character(blah.new)) 

을 IT를 파악 순위 목록?

+1

이것은'? factor '의 경고 ** 섹션 – Andrie

+1

에 설명되어 있으며 R-FAQ에도 나와 있습니다. –

+1

그러나 그것은 내가 훑어보고있는 R 책 중 하나에 없으며 지금 당장 루프에 나를 던져 줬다. – Amanda

답변

26

먼저 요인은 색인과 수준으로 구성됩니다. 이 사실은 당신이 요인으로 어려움을 겪고있을 때 매우 중요합니다. 예를 들어

여기

> z <- factor(letters[c(3, 2, 3, 4)]) 

# human-friendly display, but internal structure is invisible 
> z 
[1] c b c d 
Levels: b c d 

# internal structure of factor 
> unclass(z) 
[1] 2 1 2 3 
attr(,"levels") 
[1] "b" "c" "d" 

, z 4 개 요소를 갖는다.
색인은이 순서대로 2, 1, 2, 3입니다.
레벨은 각각 인덱스 : 1 -> b, 2 -> c, 3 -> d와 관련됩니다.

그러면 as.numeric은 단순히 색인 요소의 일부를 숫자로 변환합니다.
as.character은 인덱스와 레벨을 처리하고 레벨으로 표시되는 문자 벡터를 생성합니다.

?as.numeric에 따르면 은 기본 방법으로 처리됩니다.