2013-06-10 1 views
1

Je me demandais si vous pouviez m'aider à trouver un moyen facile de coder ces données d'événements de l'année-pays que j'utilise.Codage du début d'un événement dans les données de panel en R

Dans l'exemple ci-dessous, chaque ligne correspond à un événement en cours (que je vais éventuellement replier dans un ensemble de données de panel plus large, ce qui explique pourquoi il semble vide maintenant). Ainsi, par exemple, le pays 29 a eu le début d'un événement en 1920, qui a continué (et terminé) en 1921. Le pays 23 a eu le début de l'événement en 1921, qui a duré jusqu'en 1923. Pays 35 a eu le début d'un événement eu lieu en 1921 et seulement en 1921, et cetera.

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 

Ce que je veux faire est de créer des variables «début» et «en cours». La variable «en cours» dans cet exemple de base de données serait facile. Fondamentalement: Data$ongoing <- 1

Je suis plus intéressé par la création de la variable "apparition". Il serait codé comme 1 s'il marque le début de l'événement pour le pays donné. Fondamentalement, je veux créer une variable qui ressemble à ceci, donné cet exemple de données.

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 

Si vous pouvez penser à des façons de le faire sans effort en R (qui minimise les risques d'erreur humaine lorsque vous travaillez avec dans un programme tableur comme Excel), je vous en serais reconnaissant. J'ai vu cela related question, mais l'ensemble de données de cette personne ne ressemble pas à la mienne et cela peut nécessiter une approche différente.

Merci. Le code reproductible pour cet exemple de données est ci-dessous.

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

Un pays peut-il avoir plus d'une apparition? – flodel

+0

Dans ces données, il peut. Mes excuses pour ne pas avoir clarifié cela. – steve

Répondre

5

Cela devrait fonctionner, même avec plusieurs onsets par pays:

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

Vous pouvez aussi le faire:

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

Cela pourrait être très rapide lorsque vous avez un ensemble de données plus grande.

Questions connexes