2011-08-29 4 views
2
에서 원하지 않는 형태 변화

난과 같이 일부 데이터를 생성 말해시킨다.에 할당 R

cut(dat$z[is.finite(dat$z)],6)[1:10] 

의 결과의 처음 10 행은

[1] (0.286,1.17] (0.286,1.17] (0.286,1.17] (0.286,1.17] (0.286,1.17] 
[6] (0.286,1.17] (-1.48,-0.599] (-1.48,-0.599] (-0.599,0.286] (0.286,1.17] 
6 Levels: (-2.37,-1.48] (-1.48,-0.599] (-0.599,0.286] ... (2.06,2.94] 

하지만 나는 다음과 같은 과제를

dat$col[is.finite(dat$z)] <- cut(dat$z[is.finite(dat$z)],6) 

을하려고하면 나는 정수 대신 라벨을 얻을 :

> dat$col[1:10] 
[1] 4 4 4 4 4 4 2 2 NA 3 

행의 하위 집합에만 요소 레이블을 올바르게 지정하려면 어떻게합니까?

감사합니다. 열린

+0

꽤 정상입니다. 거기에 수치 열이 있는데, 그 중 일부 값은 절단 결과로 변경됩니다. 이것이 요소 (본질적으로 레이블이있는 숫자)이기 때문에 레이블이 아닌 숫자 값을 붙여 넣기 만하면됩니다. 따라서 R은 원치 않는 유형 변경을 수행하지 않습니다. R이 거절하는 유형 변경이 예상됩니다. 이것이 귀하의 문제입니다. ;) –

답변

0
dat[is.finite(dat$z),"col"] <- cut(dat$z[is.finite(dat$z)],6) 

작동합니다. 나는 $을 통해 할당하는 것이 왜 그렇게되는지 모르겠다.

+0

'$ <-'함수는'[<-'함수와 다르며, '추출'페이지는'$ <-'에 대한 data.frame 메소드가 없다는 것을 알려줍니다. –

+0

@DWin 그러나 base에는'$ <-. data.frame' 메쏘드가 있습니다. '? Extract' 페이지는 재귀 적 데이터 타입에 대해서만'$'메소드 (그리고 아마도 $ <-'메소드)가 있고,'data.frame'은 재귀 타입 인'list'라고 말합니다. –

+0

나는 그와 같은 메소드가 존재한다는 것이 옳다는 것을 알았다. ([[<-. data.frame' 함수와는 다르지만, 나는이 문장을 읽었다 : "$에 대한 data.frame 메소드가 없다는 것에주의하십시오. x $ name은 x를리스트로 취급하는 기본 방법을 사용합니다. "잘못된 결론을 내렸다. –

0

I 나는 내 대답은 당신이 원하는,하지만 대신 요소를 나타내는 정수의 라벨을 원하는 경우 as.character을 시도하는 것이 완전히 확실하지 :

dat$col[is.finite(dat$z)] <- as.character(cut(dat$z[is.finite(dat$z)],6)) 

당신이 그것을 요소가 될하려는 경우 문자 벡터 대신, 고려의 호출로이 포장 :

dat$col[is.finite(dat$z)] <- factor(as.character(cut(dat$z[is.finite(dat$z)],6)))