2012-04-16 3 views
0

데이터 프레임이 있는데 요인 변수를 사용하여 상위 31 개 수준 만 유지하고 다른 모든 수준을 일반 수준으로 만듭니다.벡터에 대한 R 함수

여러 가지 벡터에 걸쳐이 작업을 수행해야하므로 기능을 만들 것이라고 생각했지만 많은 행운이 없습니다. 나는 어떻게 든 mapply 또는 Vectorize을 사용할 필요가 있다고 생각하지만 나는 메모리의 3.6 기가를 할당 할 수 없다는 에러 메시지를 받으면 제대로하고 있다고 생각하지 않는다.

이 x는 벡터 인 기능이며, 탑 카운트 내가 이런 걸 쓸 수 있도록하고 싶습니다 수준의 수는

createFactor <-function(x, topCount){ 
    table1 <- data.frame(table(x)) 
    table1 <- table1[order(-table1$Freq),] 
    noChange <- table1$Var1[1:topCount] 
    newVals1 <- factor(ifelse(x %in% noChange, x, "-1000")) 
    newVals1 
} 

을 유지하는 것입니다 :

df1$topLevels <- createFactor(df1$fact1, 31) 

하나를 제안?

답변

3

나는이의 성능 특성에 대해 완전히 확실하지 않다,하지만 난 아마 같은이 기능을 쓴 것 :

내가 생각 때문에 나는 tabulate보다는 table을 사용했습니다
topK <- function(x,k){ 
    tbl <- tabulate(x) 
    names(tbl) <- levels(x) 
    x <- as.character(x) 
    levelsToKeep <- names(tail(sort(tbl),k)) 
    x[!(x %in% levelsToKeep)] <- '-1000' 
    factor(x) 
} 

월입니다 (실제로는 더 중요 할 것 같습니다.) 실제로 얼마나 빨라지는지 테스트 해보지는 않았습니다.

+0

+1하지만 실제로'levelsToKeep'는'unusedLevels'가 아닌가요? – Tommy

+0

@ 토미 당, 그걸 거꾸로 들었 니? 내가 고칠거야 ... – joran

+0

그랬어. 고맙습니다. – screechOwl