2017-03-12 7 views
0

melt() 함수를 사용하여 넓은 형식에서 긴 형식으로 변환 한 후 범주 형 변수를 R 요소로 변환하려고합니다. 그러나 팩터 함수와 입력 레벨 및 레이블을 실행할 때 테이블이 생성됩니다.생성 요인 관련 문제 R

왜 이런 일이 일어나는 지 알고 계십니까?

law <- read.csv("lawyers_class_new.csv") 


library(reshape2) 
law <- melt(law, id.vars = c("Subj"), measure.vars = c("lawyer", "neutral", "engineer", "neutral_urb", "neutral_rur")) 
law <- law[order(law$Subj),] 
law <- within(law, 
       Subj <- factor(Subj), 
       variable <- factor(variable) 
      ) 
law$variable<- ordered(law$variable,levels=c(1,2,3,4,5),labels=c("lawyer","neutral", 
    "engineer","neutral_urb","neutral_rur")) 


Output: 

law$variable 
    [1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>  <NA> <NA> <NA> <NA> 
[18] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[35] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[52] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[69] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[86] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[103] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[120] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[137] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 

용융 된 데이터 프레임 :

**Subj Cond variable value** 
1   2  lawyer  3 
1   3  neutral  1 
1   1  engineer  3.5 
1   5  neutral_urb 3 
1   4  neutral_rur 3.5 
2   2  lawyer  1 
2   3  neutral  3.5 
2   1  engineer  4.5 
2   5  neutral_urb 2 
2   4  neutral_rur 3.5 

원본 데이터의 FRAME :

Subj lawyer neutral engineer neutral_urb neutral_rur 
1   3  1  3.5   3   3.5 
2   1  3.5  4.5   2   3.5 
+1

재현 가능한 예를 만드십시오. lawyers_class_new.csv에 대한 액세스 권한이 없습니다. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+1

레벨이 주문한 요인으로의 두 번째 변환에서 '1 : 5'가 아닌 것처럼 보입니다. levels 인수는 * 요소 수준이 *로 표시되어야하며, 레이블은 다른 요소로 변경하려는 경우에만 선택 사항입니다. – Gregor

+0

또한 귀하의 목표를 모르지만 많은 사람들은 플로팅과 같이 특정 순서로 레벨을 구성하는 데 정렬 된 요소가 필요하다고 잘못 생각합니다. 그건 사실이 아니야. '정렬 된'요소의 유일한 이유는 모델링 할 때 사용되는 대비 때문입니다. – Gregor

답변

0

가 나는 요인으로 문자 열을 가져올 것이며, within를 사용하는 것이하지 않는 것 같습니다, 오류를 최소화하기 위해 법 $ 변수에 대한 요소를 적절하게 작성하십시오. 결과적으로 올바른 순서를 보장하기 위해 이와 같은 요인을 지정했습니다.

law <- read.table(text="Subj Cond variable value 
1   2  lawyer  3 
1   3  neutral  1 
1   1  engineer  3.5 
1   5  neutral_urb 3 
1   4  neutral_rur 3.5 
2   2  lawyer  1 
2   3  neutral  3.5 
2   1  engineer  4.5 
2   5  neutral_urb 2 
2   4  neutral_rur 3.5", header=TRUE, stringsAsFactors=FALSE) 

law <- law[order(law$Subj),] 

law$Subj <- as.factor(law$Subj) 
law$variable <- factor(law$variable,levels =c("lawyer","neutral", 
    "engineer","neutral_urb","neutral_rur")) 

str(law) 
'data.frame': 10 obs. of 4 variables: 
$ Subj : Factor w/ 2 levels "1","2": 1 1 1 1 1 2 2 2 2 2 
$ Cond : int 2 3 1 5 4 2 3 1 5 4 
$ variable: Factor w/ 5 levels "lawyer","neutral",..: 1 2 3 4 5 1 2 3 4 5 
$ value : num 3 1 3.5 3 3.5 1 3.5 4.5 2 3.5