2017-05-17 9 views
1

가끔은 잘 작동하지 않는 R 스크립트가 있는데 두 개의 데이터 세트를 병합하기 전에 문제가 문자 -> 인수 변환과 관련이있는 것으로 확인되었습니다.인자 변수를 인자로 바꾸기

데이터 1에는 '1', '2', '3'등으로 코딩 된 피사체 목록이 있으며 data2에는 '01', '02', '03'등이 있습니다. data1에 참여자 번호를 다시 코딩하여 data2와 일치 시키려합니다. 먼저 data1 $ subj를 인수로 변환 한 다음 forcats에서 fct_recode를 사용하여 데이터를 다시 코드화합니다. 다음과 같은 두 가지 옵션 중 어느 것도 작동 :

library(forcats) 
data1$subj <- as.factor(data1$subj) 

data1 <- data1 %>% 
    mutate(subj = fct_recode(subj, 
          "01" = "1", 
          "02" = "2", 
          "03" = "3")) 

또는

data1 <- data1 %>% 
    mutate(subj = factor(subj), 
    subj = fct_recode(subj, 
         "01" = "1", 
         "02" = "2", 
         "03" = "3")) 

내가 흔들림 감지를 확인하기 위해 다시 DATA1로 이동, 그것은 걸쳐 문자 변수로 남아 있고, 그래서 데이터가 코드화되지 않습니다.

위에서 말했듯이 가끔은 효과가 있고 가끔은 그렇지 않습니다! 나는 분명히 내 코드에서 약간의 뉘앙스를 놓쳤다. 어떤 조언을 많이 주셔서 감사합니다!

+0

, 당신은 수준 '과 같은 기본 R 직접 할당 (데이터 1의 $의 흔들림 감지)를 사용할 수 있습니다 <- 1 : 3 '이라고합시다. 대안 (선행 0을 제거하는)은'levels (temp) <- gsub ("^ 0", "", level (temp))'입니다. 두 번째는 순서를 존중하며 아마도 더 안전합니다. – lmo

답변

0

도서관에 익숙하지 않습니다. forcats. 그러나 나는

levels(data1$subj)[levels(data1$subj)=="01"] <- "1" 
[etc.] 

OR을 시도 할 것입니다 : 당신은 주제 1,2,3이있는 경우

library(plyr) 
revalue(data1$subj , c("01"="1", "02"="2","03"="3")) 
+0

고마워요,이 작품! –

+0

도움이 되니 기쁩니다. 당신은 항상 최고의 답변으로 위를 선택할 수 있습니다 :) – amonk