2017-02-28 2 views
0

Ich habe beunruhigende machendezile-Portfolio. This is my dataset: X Zeile steht für 1 Geschäftsperiode und Spalte steht für Unternehmen.Aufteilen von Dataset in Deciles in R

Ich habe versucht, jedes Quantil Werte in jeder Periode zu bekommen.

Decile_X <- data.frame(matrix(nrow = 11, ncol = 56)) 
    for(i in 1:56){ 
    Decile_X[,i]<-as.numeric(quantile(X[i,], prob = seq(0, 1,length = 11), 
type = 5, na.rm=T))} 

die diese Result of quantiles in each periods, column represents periods

ergibt Und damit ergibt ich versuchte, die Mittelwerte zwischen 0% ~ 10%, 10% ~ 20% ... 90% ~ 100% in X-Datensatz zu erhalten in jeder Periode.

Df <- data.frame(matrix(nrow = 10, ncol = 56)) 
for(i in 1:nrow(TaxExpense)){ 
    for(j in 1:10){ 
    Df[j,i] <- mean(rowMeans(X[i, which(!is.na(Decile_X[i,]) & 
     X[i,]>Decile_X[j,i] & X[i,]<=Decile_X[j+1,i])], na.rm=T)) 

Aber das Problem ist, dass, weil in einigen Perioden in Decile_X zeigt 0,000000000 in 40% ~ 50%, 50% ~ 60%, 60% ~ 70%, so dass ich nicht genau aufteilen.

Gibt es eine Lösung für dieses Problem? Oder ist meine Methode sehr ineffizient, um ein Dezil-Portfolio zu erstellen?

Ich bin neu in R und versuchte, im Detail zu erklären. Bitte helfen Sie mir.

+0

Sie können für die Aufteilung in Dezilen verwenden dplyr: mydata%>% mutieren (Quantil = NTILE (x1, 10)). x1 ist die Spalte, die Sie für die Aufspaltung in Dezilen verwenden möchten. – JonGrub

Antwort

0

Ich hoffe, ich Ihr Dilemma richtig verstehen.

Im Grunde ist es das, was ich für die Berechnung der Arithmetik innerhalb Dezilen bedeuten. Aber zuerst habe ich nur einige Dummy-Daten hinzugefügt, so dass, wenn Sie sich interessieren, um nur diese kopieren in Ihre R IDE soll es als ein Beispiel arbeiten, ohne es ändern zu müssen.

# Some dummy data 
c1 <- c(1:100) 
c2 <- c(301:400) 
c3 <- c(101:200) 
c4 <- c(201:300) 
df <- cbind(c1, c2, c3, c4) 

Hier habe ich die Zahl quant_n in Bezug auf wie viele "Partitionen" gibt es, mangels eines besseren Wortes.

quant_n <- 10 # 10 for decile, 4 for quartile, et cetera. 
# Function for computing mean within each part of the n-tile 
quantile_ave <- function(x, y = quant_n){ 
    z <- 1/y 
    q = quantile(x, seq(0, 1, by = z)) 
    cuts = cut(x, q) 
    values_per_quantile = split(x, cuts) 
    calc_mean = sapply(values_per_quantile, mean) 
    names(calc_mean) <- NULL 
    calc_mean 
} 

#Here we put the quantile_ave to work on the dummy data in df 
results <- matrix(0L, nrow = quant_n, ncol = ncol(df)) #Matrix to overwrite with results 
for (i in 1:ncol(df)){ 
    results[, i] <- quantile_ave(df[, i]) 
} 

Hoffe, dass hilft.

+0

Danke! Ich habe mein Problem anhand deines Codes gelöst! Nochmals vielen Dank ~ – SGod