2016-12-30 1 views
1

Voici quelques exemples de données:Comment compter Nombre d'événements Actuellement écoulé Lorsqu'un nouvel événement commence à partir BeginTime et EndTime

Begin = c("10-10-2010 12:15:35", "10-10-2010 12:20:52", "10-10-2010 12:23:45", "10-10-2010 12:25:01", "10-10-2010 12:30:29") 

End = c("10-10-2010 12:24:23", "10-10-2010 12:23:30", "10-10-2010 12:45:15", "10-10-2010 12:32:11", "10-10-2010 12:45:05") 

df = data.frame(Begin, End) 

Je veux compter le nombre d'événements qui ne sont pas actuellement terminée quand un nouvel événement commence et l'enregistre dans une nouvelle colonne. Donc, pour cet exemple particulier, le résultat final souhaité serait une colonne avec des valeurs: 0, 1, 1, 1, 2

J'ai besoin que ceci soit codé dans R s'il vous plaît. J'ai trouvé un moyen de calculer cela dans SAS avec une fonction de retard mais je n'aime pas cette méthode pour diverses raisons et je voudrais quelque chose qui fonctionne mieux dans R.

En réalité, j'ai 36 000 lignes et il s'agit de pannes de courant. .

Quelqu'un m'a demandé de poster ce que j'ai essayé, eh bien. Dans SAS j'ai réussi avec une fonction de décalage comme je l'ai dit. Cette méthode n'a pas bien fonctionné parce que vous devez coder en dur une tonne et ce n'est pas efficace. En R j'ai essayé de trier par begintime et le nombre de 1-36k puis trier par endtime et nombre de 1-36k et essayer quelquefois ifthen logique mais frapper un mur et ne pense pas que cela fonctionnera non plus.

Ma question a été modifiée pour être à nouveau disponible pour la communauté. La seule raison que je peux imaginer, c'est parce qu'il y a trop de réponses possibles. Eh bien, je n'ai rien édité, mais j'ai ajouté cet extrait. Dans la programmation il y aura beaucoup de réponses pour n'importe quelle bonne question qui n'est pas exactement la plus simple (mais même celles-ci ont beaucoup de réponses, spécialement dans R). Cette question est celle que je sais que beaucoup de gens vont poser à travers le temps et franchement, il est difficile de trouver une source d'information sur la façon de le faire dans R en ligne. La réponse à cette question était très courte et cela a parfaitement fonctionné. Il serait dommage de ne pas mettre cette question à la disposition de la communauté, car le but de stackoverflow est d'atteindre un répertoire de bonnes questions, donc, fondamentalement, leur nom sera tiré vers le haut lorsque les gens google choses le long de cette question.

+4

S'il vous plaît publier ce que vous avez essayé jusqu'à présent et quelques questions spécifiques que nous pouvons aider. Sinon, cela ressemble à une question «écrivez mon code pour moi» qui n'obtiendra pas une bonne réponse. –

+3

Ne pas poster vos données sous forme d'image, s'il vous plaît apprendre à donner un [exemple reproductible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610 – Jaap

+0

J'ai dit ce que j'avais essayé et a réussi avec Ali, merci. Je suis désolé que vous pensiez que cela ressemble à un s'il vous plaît écrivez mon code pour moi question et j'espère que d'autres choisissent de ne pas y répondre avec malveillance. Je pense que ce serait juste dire quelque chose au sujet de cette communauté considérant que je crois que c'est une manipulation datetime plus clairement que beaucoup d'autres. J'espère que les autres ne pensent pas que vous devriez vous justifier avant de poser une question. – TravisLong

Répondre

0

Peut-être que cette aide:

library(lubridate) 
library(data.table) 
df <- as.data.frame(lapply(df, dmy_hms)) 
dt <- as.data.table(df) 
setkey(dt,Begin,End)[,id:=.I] 
merge(dt, foverlaps(dt,dt)[id>i.id,.N,by="Begin,End"], all.x=T)[,id:=NULL][is.na(N),N:=0][] 
# Begin     End N 
# 1: 2010-10-10 12:15:35 2010-10-10 12:24:23 0 
# 2: 2010-10-10 12:20:52 2010-10-10 12:23:30 1 
# 3: 2010-10-10 12:23:45 2010-10-10 12:45:15 1 
# 4: 2010-10-10 12:25:01 2010-10-10 12:32:11 1 
# 5: 2010-10-10 12:30:29 2010-10-10 12:45:05 2 
+0

Merci! Je vais vérifier cela après le déjeuner. Ça promet :) Je l'apprécie. – TravisLong