2017-05-17 1 views
0

J'ai un grand bloc de données qui contient les données des clients. J'essaie d'activer un algorithme sur chaque client, mais face à des problèmes de performance. Pour cette raison, je voudrais sous-ensemble des données sur chaque client, mais en prenant seulement les dernières observations les plus à jour.Données de sous-ensemble avec numéro de ligne limité

questions importantes:

  • Je suis en mon algorithme pour chaque nouvelle observation (ce qui signifie, je besoin d'un « nouveau » sous-ensemble pour chaque nouvelle observation)

  • Je tiens une histoire de tous les clients (ce qui est la « grande trame de données » mentionnées ci-dessus) qui rafraîchissent une fois par jour

je pensais faire quelque chose comme (et puis en sélectionnant l'tail ou head ou d'une autre, plus rapide, méthode):

dfrm %>% group_by(cust_id) %>% .[order(-.[,1]),] 

où ma première colonne est la date et l'heure cutomer a pris son achat dans le format suivant yyyy-mm-dd HH:MM:SS (de la structure POSIXct); mais je reçois une erreur de

Erreur dans -POSIXt (à gauche): unaire « - » est pas défini pour les objets « POSIXt »

En plus de résoudre mon problème, je serai heureux d'entendre d'autres idées pour gérer mon problème.

+0

Pourquoi n'utilisez-vous pas 'arrange'? et peut-être «tranche» ou «filtre» –

Répondre

0

Comme il a été suggéré que vous pourriez faire:

dfrm <- data.frame(date = as.POSIXlt(Sys.time() + rnorm(5)), cust_id = rnorm(5)) 
dfrm %>% group_by(cust_id) %>% arrange(date) %>% slice(1) 

Pour arranger dans un ordre différent utiliser arrange(desc(date)) pas -

Comme vous avez demandé dans le commentaire concernant le filtrage et 100 derniers enregistrements:

dfrm <- data.frame(date = as.POSIXlt(Sys.time() + rnorm(5)), cust_id = rnorm(5), hour = 1:5) 
dfrm %>% group_by(cust_id) %>% arrange(date) %>% filter(hour == 1) %>% slice(1:100) 
+0

Merci! Maintenant, j'ai juste besoin de vérifier mes performances avec cette nouvelle méthode :) – staove7

+0

Avec votre premission je vais vous demander encore une chose .. Après avoir arrangé mes données historiques: 'groups <- dfrm %>% group_by (cust_id)%>% arranger (date) '.. J'essaie de sortir les données du client (les 100 dernières observations) qui ont eu lieu entre des heures spécifiques (champ' heure') .. J'essaie de le faire en utilisant 'filter' sans succès. Pouvez-vous s'il vous plaît m'aider avec ça? Merci d'avance – staove7

+1

J'ai ajouté quelques lignes avec filtrage et tranche pour les 100 dernières observations. –