2016-05-12 2 views
1

Le code ci-dessous crée un exemple de trame de données pour illustrer mon problème. J'ai une liste d'événements horodatés. J'essaye de créer une nouvelle variable qui énumère les événements précédents dans une fenêtre indiquée. disons que la fenêtre est de taille 10. Je voudrais créer l'image ci-dessous. Mon but ultime est de préparer mes données pour l'analyse des séquences d'événements.Structure de données pour la séquence d'analyse d'événement dans R

time event eventList 
1  6  NA 
2  5  NA 
3  7  NA 
4  8  NA 
5  4  NA 
6  2  NA 
7  10  NA 
8  9  NA 
9  4  NA 
10  6  NA 
11  4  {6,5,7,8,4,2,10,9,4,6} 
12  3  {5,7,8,4,2,10,9,4,6,4} 
13  8  {7,8,4,2,10,9,4,6,4,3} 
14  3  {8,4,2,10,9,4,6,4,3,8} 
15  9  {4,2,10,9,4,6,4,3,8,3} 
16  1  {2,10,9,4,6,4,3,8,3,9} 
17  7  {10,9,4,6,4,3,8,3,9,1} 
18  3  {9,4,6,4,3,8,3,9,1,7} 
19  8  {4,6,4,3,8,3,9,1,7,8} 
20  10  {6,4,3,8,3,9,1,7,8,10} 
+0

Selon ce que vous voulez faire exactement, il pourrait être utile d'examiner ['ts'] (https://stat.ethz.ch/R-manual/R-devel/library/stats/html/ts.html) objets et [' window'] (https: //stat.ethz. ch/R-manuel/R-devel/bibliothèque/stats/html/window.html). – Gabe

Répondre

2

Les trois dernières lignes ne correspondent pas, pourriez-vous s'il vous plaît vérifier votre résultat attendu

mydf=read.table(text=" 
time event 
1  6 
2  5 
3  7 
4  8 
5  4 
6  2 
7  10 
8  9 
9  4 
10  6 
11  4 
12  3 
13  8 
14  3 
15  9 
16  1 
17  7 
18  3 
19  8 
20  10",header=TRUE,stringsAsFactors=FALSE) 


windowSize = 10 
mydf$eventList = do.call(rbind,lapply(mydf$time,function(x) { 
ifelse(x<windowSize,NA,paste0("{", paste0(mydf[ tail(1:x,windowSize) ,"event"],collapse=",") , "}")) 

})) 

mydf 
# time event    eventList 
#1  1  6     <NA> 
#2  2  5     <NA> 
#3  3  7     <NA> 
#4  4  8     <NA> 
#5  5  4     <NA> 
#6  6  2     <NA> 
#7  7 10     <NA> 
#8  8  9     <NA> 
#9  9  4     <NA> 
#10 10  6 {6,5,7,8,4,2,10,9,4,6} 
#11 11  4 {5,7,8,4,2,10,9,4,6,4} 
#12 12  3 {7,8,4,2,10,9,4,6,4,3} 
#13 13  8 {8,4,2,10,9,4,6,4,3,8} 
#14 14  3 {4,2,10,9,4,6,4,3,8,3} 
#15 15  9 {2,10,9,4,6,4,3,8,3,9} 
#16 16  1 {10,9,4,6,4,3,8,3,9,1} 
#17 17  7 {9,4,6,4,3,8,3,9,1,7} 
#18 18  3 {4,6,4,3,8,3,9,1,7,3} 
#19 19  8 {6,4,3,8,3,9,1,7,3,8} 
#20 20 10 {4,3,8,3,9,1,7,3,8,10} 
2

Je suppose que quelqu'un va venir avec une plus R façon d'aller cela, réduire votre temps d'exécution. En attendant, vous pouvez essayer ceci:

for (i in 1:nrow(mydf)){ 
    if(i<=w){ 
    mydf$eventList[i] = NA 
    } 
    else { 
    mydf$eventList[i] = list(mydf$event[c((i-w):i)]) 
    } 
}