2017-01-26 13 views
0

요인으로 전환하려고하는 데이터 프레임이 있습니다. 각 행이 값을 나타내는 순서로 정렬 된 수준으로 요소를 나타 내기를 원합니다. 내 코드는이 마지막 작업의 짧은 떨어지고 :여러 요인을 만들 때 고유 한 수준 지정

> x 
    V11 V12 V13 V21 V22 V23 V31 V32 V33 V41 V42 V43 
r1 1 2 3 4 5 6 7 8 9 10 11 12 
r2 1 2 3 4 5 6 10 11 12 7 8 9 
r3 1 2 3 7 8 9 10 11 12 4 5 6 
r4 4 5 6 7 8 9 10 11 12 1 2 3 
> 
> x %>% 
+ t %>% 
+ as_data_frame %>% 
+ mutate_all(factor) %>% 
+ lapply(., unlist) 
$r1 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 
Levels: 1 2 3 4 5 6 7 8 9 10 11 12 

$r2 
[1] 1 2 3 4 5 6 10 11 12 7 8 9 
Levels: 1 2 3 4 5 6 7 8 9 10 11 12 

$r3 
[1] 1 2 3 7 8 9 10 11 12 4 5 6 
Levels: 1 2 3 4 5 6 7 8 9 10 11 12 

$r4 
[1] 4 5 6 7 8 9 10 11 12 1 2 3 
Levels: 1 2 3 4 5 6 7 8 9 10 11 12 

수준이 (가 첫번째로 전환 된 명령 파이프) 초기 dataframe에서 각 컬럼의 다른 일치하도록 지정하려면 어떤 방법이 있나요; 지금 각 요소는 부정확 한 수준의 동일한 순서를가집니다.

+2

당신은 사용할 수'X %> % t %> % as.data.frame() %> % mutate_all (funs입니다 (계수 (, 레벨 = 유일한 (.))))) %> % lapply (., unlist)' – akrun

+2

@akrun, 그건 완벽합니다. 나는 지금 내가 제목에서 내 자신의 질문에 거의 대답했다는 것을 깨닫는다! – Visser

답변

2

당신은 factor() 내부 levels = 인수를 지정해야합니다.

lapply(data.frame(t(df)), function(x) factor(x, levels = unique(x))) 
#$r1 
# [1] 1 2 3 4 5 6 7 8 9 10 11 12 
#Levels: 1 2 3 4 5 6 7 8 9 10 11 12 

#$r2 
# [1] 1 2 3 4 5 6 10 11 12 7 8 9 
#Levels: 1 2 3 4 5 6 10 11 12 7 8 9 

#$r3 
# [1] 1 2 3 7 8 9 10 11 12 4 5 6 
#Levels: 1 2 3 7 8 9 10 11 12 4 5 6 

#$r4 
# [1] 4 5 6 7 8 9 10 11 12 1 2 3 
#Levels: 4 5 6 7 8 9 10 11 12 1 2 3 
+1

% t %> % as.data.frame() %> % mutate_all (funs (요인 (., 수준 = 고유 (.)))) % % > % lapply (., unlist)' – akrun