2017-08-31 3 views
0

Ich habe Panel-Daten Zeitreihen, und ich möchte eine Variable mit dem Quartil des Mittelwerts einer bestimmten Variablen erstellen, so dass ein Unternehmen nur in a gefunden werden kann gegebenes Quartil. Zum Beispiel, wenn ich 4 Unternehmen:Erstellen einer Quartilsäule mit Durchschnitt pro Beobachtungen statt als Zeilenwert

df = 
    id year value Quartile* Quartile** 
    1 2010 1  1   1 
    1 2015 1  1   1 
    2 2010 10  2   2 
    2 2015 10  2   2 
    3 2010 10  2   3 
    3 2015 20  3   3 
    4 2010 40  4   4 
    4 2015 40  4   4 

Mit dem Standardansatz Quartil * so:

df<- within(df, Quartile* <- as.integer(cut(TotalAssets_wins, 
              quantile(value, probs=0:4/4), 
              include.lowest=TRUE))) 

ich die Werte für Quartil * zu erhalten, aber ich möchte Unternehmen verhindern, dass andere mit Quartile Werte durch die Zeit. Aus diesem Grund möchte ich den Wert des Quartils anhand des Durchschnitts aller Beobachtungen pro Firma berechnen, um die Werte für Quartil ** zu erhalten. Der Hauptunterschied besteht darin, dass sie feste abhängige Werte sind. Irgendeine Idee, wie man das in meinem Code implementiert?

Antwort

1

Hier ist eine Methode mit tapply, rank und split.

# create 0 vector 
dat$q <- 0 
# fill it in 
split(dat$q, dat$id) <- rank(tapply(dat$value, dat$id, FUN=mean)) 

Hier tapply berechnet den Mittelwert von ID und rank stuft diese Mittel. Wir füttern dieses Ranking in Spalte q des data.frame mit split. Als eine Randnotiz, weil tapply und split die Beobachtungen in die gleiche Gruppe in der gleichen Reihenfolge ordnen, müssen die Beobachtungen nicht in einer bestimmten Reihenfolge sein, damit dies funktioniert.

Das gibt

dat 
    id year value Quartile. Quartile.. q 
1 1 2010  1   1   1 1 
2 1 2015  1   1   1 1 
3 2 2010 10   2   2 2 
4 2 2015 10   2   2 2 
5 3 2010 10   2   3 3 
6 3 2015 20   3   3 3 
7 4 2010 40   4   4 4 
8 4 2015 40   4   4 4 

wo die q Spalte die gewünschten Werte in der Quartile .. Spalte übereinstimmt.

Daten

dat <- 
structure(list(id = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), year = c(2010L, 
2015L, 2010L, 2015L, 2010L, 2015L, 2010L, 2015L), value = c(1L, 
1L, 10L, 10L, 10L, 20L, 40L, 40L), Quartile. = c(1L, 1L, 2L, 
2L, 2L, 3L, 4L, 4L), Quartile.. = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 
4L)), .Names = c("id", "year", "value", "Quartile.", "Quartile.." 
), class = "data.frame", row.names = c(NA, -8L)) 
+0

sieht gut paaren, danke für die Antwort! –

Verwandte Themen