Hier Art und Weise die Variablen durch die Hilfe der cumuluated Summen fatal/nicht-tödliche/irgendwelche Abstürze von Fluggesellschaft zu berechnen:
# Load required package
library(data.table)
# Setup data
d <- fread("Airline Year Fatal Non_Fatal
French_Airline 1989 1 1
French_Airline 1990 1 0
French_Airline 1991 0 0
French_Airline 1992 0 1
French_Airline 1993 0 0
UK_Airline 1989 1 1
UK_Airline 1990 0 0
UK_Airline 1991 1 0
UK_Airline 1992 0 0
UK_Airline 1993 0 0", header=T)
# Since fatal calculation
d[ ,Cumsum.Fatal:=cumsum(Fatal), by=Airline]
d[Fatal!=1, Since.Fatal:=1:.N, by=list(Airline, Cumsum.Fatal)]
d[Fatal==1, Since.Fatal:=0]
# Since non-fatal calculation
d[ ,Cumsum.Non_Fatal:=cumsum(Non_Fatal), by=Airline]
d[Non_Fatal!=1, Since.Non_Fatal:=1:.N, by=list(Airline, Cumsum.Non_Fatal)]
d[Non_Fatal==1, Since.Non_Fatal:=0]
# Since any (fatal or non-fatal) crash
d[, Any_Crash:=ifelse(I(Fatal+Non_Fatal)>=1, 1, 0)]
d[ ,Cumsum.Any_Crash:=cumsum(Any_Crash), by=Airline]
d[Any_Crash!=1, Since.Any_Crash:=1:.N, by=list(Airline, Cumsum.Any_Crash)]
d[Any_Crash==1, Since.Any_Crash:=0]
Der letzte data.table
so aussieht:
# > d
# Airline Year Fatal Non_Fatal Cumsum.Fatal Since.Fatal Cumsum.Non_Fatal Since.Non_Fatal Any_Crash Cumsum.Any_Crash Since.Any_Crash
# 1: French_Airline 1989 1 1 1 0 1 0 1 1 0
# 2: French_Airline 1990 1 0 2 0 1 1 1 2 0
# 3: French_Airline 1991 0 0 2 1 1 2 0 2 1
# 4: French_Airline 1992 0 1 2 2 2 0 1 3 0
# 5: French_Airline 1993 0 0 2 3 2 1 0 3 1
# 6: UK_Airline 1989 1 1 1 0 1 0 1 1 0
# 7: UK_Airline 1990 0 0 1 1 1 1 0 1 1
# 8: UK_Airline 1991 1 0 2 0 1 2 1 2 0
# 9: UK_Airline 1992 0 0 2 1 1 3 0 2 1
# 10: UK_Airline 1993 0 0 2 2 1 4 0 2 2
UPDATE:
Hier
ist effiziente Art und Weise, wie Sie den Befehl mit freundlicher Genehmigung von Frank (siehe Kommentare) schreiben:
d[, sf := seq(.N)-1L, by=.(Airline, cumsum(Fatal))][, snf := seq(.N)-1L, by=.(Airline, cumsum(Non_Fatal))][, sa := seq(.N)-1L, by=.(Airline, cumsum(pmax(Fatal, Non_Fatal)))][]
# Airline Year Fatal Non_Fatal Cumsum.Fatal Since.Fatal Cumsum.Non_Fatal Since.Non_Fatal Any_Crash Cumsum.Any_Crash Since.Any_Crash sf snf sa
# 1: French_Airline 1989 1 1 1 0 1 0 1 1 0 0 0 0
# 2: French_Airline 1990 1 0 2 0 1 1 1 2 0 0 1 0
# 3: French_Airline 1991 0 0 2 1 1 2 0 2 1 1 2 1
# 4: French_Airline 1992 0 1 2 2 2 0 1 3 0 2 0 0
# 5: French_Airline 1993 0 0 2 3 2 1 0 3 1 3 1 1
# 6: UK_Airline 1989 1 1 1 0 1 0 1 1 0 0 0 0
# 7: UK_Airline 1990 0 0 1 1 1 1 0 1 1 1 1 1
# 8: UK_Airline 1991 1 0 2 0 1 2 1 2 0 0 2 0
# 9: UK_Airline 1992 0 0 2 1 1 3 0 2 1 1 3 1
# 10: UK_Airline 1993 0 0 2 2 1 4 0 2 2 2 4 2
In Eingang und Ausgang der 'Fatal‘, ‚Non-Fatal‘ Werte nicht gleich sind. – akrun
Mein schlechtes! Bearbeitet jetzt, natürlich soll es dasselbe sein. – vio
Ist es absichtlich, dass Sie eine längere Zeit ohne fatal mehrere Male zählen, wie Sie nicht-tödlich jedes Mal erhöhen? Z.B. Französisch: 0,0,1,2,3: In einigen Analysen könnte dies Daten über 8 Jahre aussehen - aber es sind 5 Jahre. – Christoph