2017-05-08 2 views
0

Hier ein Beispiel für meine data.frame:Shift-Zeilen, die von Gruppe durch zufällig generierte Delta t

df = read.table(text = 'ID Day 
101 0 
101 0 
101 1 
300 40 
300 40 
270 32 
270 35 
100 1450 
100 1450 
100 1451 
72 1490 
72 1499', header = TRUE) 

Unter der Annahme, dass jeder Day obs ein reales Datum und die Zeitdauer reicht von Day = 0 bis Day repräsentiert = 1500, ich brauche jede ID Gruppe durch eine zufällige Menge an Day (delta t) zu verschieben, die spezifisch für jede Gruppe, und wenn der Wert Day gibt 1500 beginnt erneut bei 0.

zB Gruppe 101 von 30 Tag, Gruppe 300 von 70, Gruppe 270 um 1000, Gruppe 100 von 100 und Gruppe 72 von 5

Hier ist meine gewünschte Ausgabe:

 ID Day 
    101 30 
    101 30 
    101 31 
    300 110 
    300 110 
    270 1032 
    270 1035 
    100 1550 
    100 1550 
    100 1551 
    72 1495 
    72 3 

anzumerken, dass die Verschiebung in Day pro jede Gruppe muss zufällig sein.

Jede Hilfe würde wirklich geschätzt werden.

Dank

+0

nicht sicher, ob ich es bekommen habe, aber mit 'data.table' Sie könnten versuchen,' setDT (df) [, Day_new: = (Tag + runif (uniqueN (ID), 0,1500)) %% 1500, by = ID] '. – nicola

+0

Sorry, aber es funktioniert nicht, trotzdem danke – aaaaa

+0

Ich glaube, der Trick ist, die Zufallszahlen zu jedem Tag innerhalb jeder Gruppe von IDs – aaaaa

Antwort

0
library(dplyr) 

set.seed(123) 

df2 <- df %>% 
    group_by(ID) %>% 
    mutate(Day = (Day + sample(1:1000, 1)) %% 1500) 
2

Dies wird eine Zufallszahl zwischen 0 und 1000 an jedem Tag hinzufügen - Sie die Grenzen sample je nachdem, was Sie benötigen, anpassen können.

library(dplyr) 

set.seed(123) 

df2 <- df %>% 
    group_by(ID) %>% 
    mutate(Day = (Day + sample(1:1000, 1)) %% 1500) 

df2  
# ID Day 
# 101 409 
# 101 409 
# 101 410 
# 300 981 
# 300 981 
# 270 916 
# 270 919 
# 100 739 
# 100 739 
# 100 740 
# 72 278 
# 72 287 
+0

glatt wie ein Ei, danke – aaaaa

+0

Entschuldigung, aber ich habe negative Tag Werte ... warum? – aaaaa

+0

können Sie die Vorher-Nachher-Werte anzeigen, die die negativen Zahlen enthalten? In 'muate' könnten Sie der neuen Variablen einen anderen Namen geben (sagen wir' Day2'), der Ihnen bei der Fehlersuche helfen könnte. – Craig

Verwandte Themen