2013-04-17 3 views
0

개인이 해당 연도에 근무한 회사에 대한 정보가 포함 된 고용 데이터를 분석합니다. 각 연도는 별도의 데이터 프레임입니다.데이터 프레임 내 및 그룹 전체에서 그룹을 컨디셔닝하는 동안 고유하지 않은 인스턴스의 빈도

1 년 동안 여러 회사에서 근무한 개인뿐만 아니라 특정 연도에 여러 회사에서 근무한 개인을 신속하게 파악할 수 있기를 바랍니다. 내 목표는 주어진 회사가 한 해 (단일 데이터 프레임)와 수년에 걸쳐 "출구"(직원을 변화시키는 회사)를 경험하는 횟수에 대한 빈도를 계산하는 것입니다.

데이터 프레임 (들)을 다음과 같이 구성되어 있습니다 :

year1 <- data.frame(individual=c("1", "2", "3", "4", "2", "6", "7", "3", "9", "10"), 
       firm=c("A", "B", "C", "D", "A", "C", "D", "B", "B", "C")) 

year2 <- data.frame(individual=c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"), 
       firm=c("A", "B", "D", "D", "A", "C", "D", "A", "B", "C")) 

나는 개인과 기업 사이의 모든 고유하지 않은 단체를 검색하여, 해당 연도 내에서이 작업을 수행하는 방법에 상당히 확신하지만, 여러 데이터 개체/년 동안이 작업을 수행하는 방법에 대한 손실이 있습니다. 다시 말하지만, 저는 특정 개인보다는 회사를위한 "출구"의 빈도에 관심이 있습니다.

exit(withinyear)_byfirm 
exit(betweenyear)_byfirm 

답변

0

카운트가 아닌 비율 :

within <- function(y) { 
    # A vector of length > 1 in the aggregate function means that the person has 
    # changed jobs. 
    # `[` ignores the value 0 if there are other values present, and returns a 
    # zero-length vector if not. Often a source of confusion, but perfect here. 
    table(levels(y$firm)[aggregate(firm~individual, data=y, 
           function(x) {z<- unique(x)     
               if(length(z) > 1) head(z, -1) else 0})$firm]) 
} 

between <- function(year1, year2) { 
    # Last place worked in year1 
    y1 <- rbind(do.call(rbind, by(year1, year1$individual, FUN=tail, 1))) 

    # First place worked in year2 
    y2 <- rbind(do.call(rbind, by(year2, year2$individual, FUN=head, 1))) 

    # Combine these and look for duplicate individuals with the prior function 
    y <- rbind(y1, y2) 
    within(y) 
} 

결과 :

> within(year1) 

B C 
1 1 

> within(year2) 
character(0) 

> between(year1, year2) 

A B 
1 1 
+0

두 가지를 다음과 같이

내 이상적인 출력은 각 회사의 전체 직원의 주파수/비율 것 오류 : 이내 (연도 1) 수준의 오류 (y $ 회사) [집계 (firm ~ i ndividual, data = y, function (x) {: 잘못된 하위 유형 'list' 집계 할 때 일종의 색인 생성 문제가있는 것으로 보입니까? 그것은 인덱스가 아닌리스트를 정렬하려고 시도하고 있습니까? 나 맞아? match.names에서 (YEAR1, YEAR2, year3, +4 과정, year5) 오류 (clabs, 이름 (XI)) 사이 : 이름은 내가이 사실과 관련이있다 생각 이전의 이름과 일치하지 않는 어떤 사람들 패널 데이터/보존에 대한 고전적인 문제인데 반해 다른 것들은 그렇지 않은 경우에도 반복됩니다. –

+0

매우 이상합니다. R 2.15.2에서는 오류가 발생하지 않습니다. 또한 위의 'between'은 두 개의 인수 만 취합니다. 당신은 더 필요합니다? –

+0

예, 저는 귀하의 예를 사용하고 모든 5 년 데이터 세트를 포함하도록 인수를 수정했습니다. –