2017-02-28 2 views
0

나는 십분배 포트폴리오를 만드는 데 어려움을 겪고 있습니다. This is my dataset: X 행은 1 회계 기간을 나타내며 Column은 회사를 나타냅니다.데이터 세트를 십진수로 나누기 R

각 기간마다 모든 분위 값을 얻으려고했습니다. 이 Result of quantiles in each periods, column represents periods

을 수율

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))} 

내가 X 데이터 세트에서 0 % ~ 10 %, 10 % ~ 20 % ... 90 % ~ 100 % 사이의 평균값을 얻기 위해 노력이 결과 각 기간마다.

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)) 

그러나 문제는 Decile_X 일부 기간에 0.000000000 40 % ~ 50 %, 60 % ~ 50 %, 60 % ~ 70 %를 나타내고, 그래서 때문에 정확하게 분할 할 수 있다는 것이다.

이 문제를 해결하려면 어떤 해결책이 있습니까? 내 방법으로 십진법 포트폴리오를 만드는 것이 비효율적입니까?

저는 R이 처음이므로 자세히 설명하려고했습니다. 도와주세요.

+0

dplyr을 사용하여 십진수로 나눌 수 있습니다. mydata %> % mutate (quantile = ntile (x1, 10)). x1은 십진수로 분리하기 위해 사용하려는 열입니다. – JonGrub

답변

0

나는 당신의 딜레마를 올바르게 이해하기를 바랍니다.

기본적으로 이것은 십진수 내에서 산술 평균을 계산하기 위해 수행하는 작업입니다. 하지만 먼저 더미 데이터를 추가 했으므로 R IDE에이 데이터를 복사하려는 경우 변경하지 않고도 예제로 작동해야합니다.

# 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) 

여기서 더 나은 단어가 부족하여 얼마나 많은 "파티션"이 있는지에 대한 숫자 quant_n을 설정했습니다.

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]) 
} 

희망이 있습니다.

+0

감사! 내가 당신의 코드를 기반으로 내 문제를 해결! 다시 한번 감사드립니다 ~ – SGod