2013-06-10 2 views
1

제가 사용하고있는이 연중 내년 이벤트 데이터를 쉽게 작성할 수 있도록 도와 줄 수 있는지 궁금합니다.패널 데이터에서 이벤트 시작에 대한 코드 작성 R

아래 예제에서 각 행은 진행중인 이벤트와 일치합니다 (이제는 더 넓은 패널 데이터 세트로 접어 들게되어 이제는 겉으로 드러난 것입니다). 그래서 예를 들어, 국가 29는 1920 년에 사건이 시작되어 1921 년에 계속되었다 (그리고 끝났음). 국가 23은 1923 년까지 지속 된 1921 년에 사건이 시작되었다. 국가 35 사건이 시작되었다. 1921 년에만 발생했으며 1921 년에만 발생했다. 내가 원하는 무엇

country  year 
    29  1920 
    29  1921 
    23  1921 
    23  1922 
    23  1923 
    35  1921 
    64  1926 
    135  1928 
    135  1929 
    135  1930 
    135  1931 
    135  1932 
    135  1933 
    135  1934 
    120  1930 
    70  1932 

는 "시작"과 "진행"변수를 만드는 것입니다. 이 샘플 데이터 프레임의 "진행중인"변수는 쉬울 것입니다. 기본적으로 : Data$ongoing <- 1

"시작"변수를 만드는 데 더 관심이 있습니다. 해당 국가의 이벤트 시작을 표시하는 경우 1로 코딩됩니다. 기본적으로이 예제 데이터가 주어지면이 모양의 변수를 만들고 싶습니다. 당신이 (엑셀과 같은 스프레드 시트 프로그램에서 작업을 할 때 그 사람의 실수의 가능성을 최소화) R에서이 작업을 수행하기 위해 노력 방법을 생각 할 수있는 경우

country  year  onset 
    29  1920  1 
    29  1921  0 
    23  1921  1 
    23  1922  0 
    23  1923  0 
    35  1921  1 
    64  1926  1 
    135  1928  1 
    135  1929  0 
    135  1930  0 
    135  1931  0 
    135  1932  0 
    135  1933  0 
    135  1934  0 
    120  1930  1 
    70  1932  1 

, 나는 그것을 감사하겠습니다. 나는이 related question을 보았지만,이 사람의 데이터 세트는 내 모습이 아니며 다른 접근 방식을 요구할 수도 있습니다.

감사합니다. 이 예제 데이터의 재현 가능한 코드는 다음과 같습니다.

country <- c(29,29,23,23,23,36,64,135,135,135,135,135,135,135,120,70) 
year <- c(1920,1921,1921,1922,1923,1921,1926,1928,1929,1930,1931,1932,1933,1934,1930,1932) 

Data=data.frame(country=country,year=year) 
summary(Data) 
Data 
+0

국가에 두 개 이상의 발병이있을 수 있습니까? – flodel

+0

이 데이터에서 가능합니다. 그 사실을 분명히하지 않은 것에 대해 사과드립니다. – steve

답변

5

이도 나라마다 여러 온셋으로 작동합니다 :

Data$onset <- with(Data, ave(year, country, FUN = function(x) 
       as.integer(c(TRUE, tail(x, -1L) != head(x, -1L) + 1L)))) 
0

당신은 또한이 작업을 수행 할 수 있습니다 : 당신이 큰 데이터 세트가있을 때

library(data.table) 
setDT(Data)[, onset := (min(country*year)/country == year) + 0L, country] 

이 매우 빠르게 될 수 있습니다.