2013-05-14 4 views
1

2 가지 요인에 기초한 이원화 된 변수를 생성해야합니다 (가능한 한 가능).요인에 의한 데이터 디코모티 화

의 내가 데이터 있다고 가정 해 봅시다 :

d <- data.frame ( 
    agegroup = c(2,1,1,2,3,2,1,3,3,3,3,3,1,1,2,3,2,1,1,2,1,2,2,3) , 
    gender = c(2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,1,1,1,2,1,1,1) , 
    hourwalking = c(0.3,0.5,1.1,1.1,1.1,1.2,1.2,1.2,1.3,1.5,1.7,1.8,2.1,2.1,2.2,2.2,2.3,2.4,2.4,3,3.1,3.1,4.3,5)   
    ) 

내가 바이너리 (LowWalkHrs)를 만들 싶습니다 (예를 들어, 때 연령 집단 = 1, 성별 = 1, 평균을 성별 및 연령 집단 별 평균을 사용하여 = 2.1 (Excel을 사용하여 중간 값을 찾았습니다)). LowWalkHrs는 데이터 집합의 추가 변수가 될 것이다, 그래서 출력은 다음과 같습니다

 agegroup gender hourwalk LowWalkHrs 
     2  2  0.3  1 
     1  2  0.5  1 
     1  2  1.1  0 
     2  2  1.1  1 
     3  2  1.1  1 
     2  2  1.2  0 
     1  1  1.2  1 
      .... 
     3  1  5   0 

Excel에서 밖으로 질문 그래서 나는 오히려 큰 데이터 세트 (~ 10,000 관측)가 있습니다.

나는 cut과 cut2를 시도했는데 factor 변수를 취하지 않는 것 같았고 ddply도 오류 메시지를 보냈습니다. (오류는 $<-.data.frame (*tmp*, "lowWalkHrs", value = list hourwalking의 =의 C (0.63 : 교체 949 개 행이 데이터는 11,303을 가지고)

답변

1

나는이 느려질 수 있습니다 의심하지만 나는 그것이 작동 생각한다.

z <- mapply(d$agegroup, d$gender, d$hourwalking, FUN=function(a,g,h) 
    as.numeric(h < median(d$hourwalking[d$agegroup==a & d$gender==g]))) 
+0

큰 데이터 집합에서 시도하지 않았지만 작동합니다. 감사! – user2382532

+0

좋아요, 큰 데이터 세트로 시도해 보았습니다. 오류 메시지가 나타납니다 : dappy (d $ agegroup, d $ gender, d $ hourwalking, : 길이가 0 인 입력은 길이가 0이 아닌 입력과 섞을 수 없습니다. 더 큰 데이터 집합에서 데이터가 누락되었지만 오류의 원인은 무엇입니까? – user2382532

+0

그래,'[...] '의 내용은 누락 된 값과 잘 작동하지 않습니다 .. – Thomas

2
d <- data.frame ( 
    agegroup = c(2,1,1,2,3,2,1,3,3,3,3,3,1,1,2,3,2,1,1,2,1,2,2,3) , 
    gender = c(2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,1,1,1,2,1,1,1) , 
    hourwalking = c(0.3,0.5,1.1,1.1,1.1,1.2,1.2,1.2,1.3,1.5,1.7,1.8,2.1,2.1,2.2,2.2,2.3,2.4,2.4,3,3.1,3.1,4.3,5)   
    ) 

d$LowWalkHrs=1*with(d,hourwalking<ave(hourwalking,list(factor(agegroup,exclude=NULL),factor(gender,exclude=NULL)),FUN=median)) 

요소를 (..., exclude = NULL)이 별도 그룹으로 NA를 처리하기 위해 추가되었습니다.

+0

완벽한 - 감사합니다! – user2382532