2017-01-20 8 views
1

다른 것들 중에서 - 같은 것을 참조하는 두 개의 열이 포함 된 데이터 프레임이 있습니다. 하나는 다른 ID에 대한 숫자 ID로, 요인으로 분석됩니다.다른 열의 조회를 기반으로 요인 수준의 순서 변경

df = data.frame(
    "id" = c(5, 3, 1, 2, 4, 5), 
    "val" = factor(c("a", "b", "c", "d", "e", "a")), 
    "someColumn" = c(13, 38, 91, 83, 19) 
) 

다른 추가 열이 있기 때문에 해당 요소 수준에 중복이 있습니다. 이제 요소 수준은 데이터 프레임에 나타나는 순서와 관계없이 사전 순으로 정렬됩니다.

여기에 문제가 있습니다. 해당 ID에 따라 요인의 수준을 주문하고 싶습니다. 이렇게하면 특히 플롯에서 작업하기가 더 쉬워집니다. 나는 라벨을 바꾸고 싶지 않아. 레벨을 실제 ID로 변경하는 것이 좋겠지 만 필요하다고 생각하지 않습니다.

Warning message: 
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, : 
    duplicated levels in factors are deprecated 

I 돈 : 중복이 있기 때문에,

factor(df$val, levels = df$val[order(df$id)]) 

그러나, 이것은 내 경우에는 작동하지 않습니다 내가 찾은 다른 예에서

는 제안 같은 것을 할 것이었다 데이터를 버리거나 순서를 변경하고 데이터 프레임 작업을 계속하고 싶지 않기 때문에 원래 데이터의 행을 제거하고 싶지 않습니다. 경고와 복제 된 레벨을 다른 방법으로 제거 할 수 있습니까? 아니면 완전히 다른 접근법을 사용해야합니까?

답변

3

이 시도 :

factor(df$val, levels = unique(df$val[order(df$id)]))