2016-11-06 2 views
1

(再現例えば所与)関数causfinder::causalitycombinations特定のデータフレームの値としてオンザフライの数字の代わりに文字列を割り当てる方法はありますか?以下

causalitycombinations <- function (nvars, ncausers, ndependents) 
{ 
    independents <- combn(nvars, ncausers) 
    swingnumber <- dim(combn(nvars - ncausers, ndependents))[[2]] 
    numberofallcombinations <- dim(combn(nvars, ncausers))[[2]] * swingnumber 
    dependents <- matrix(, nrow = dim(combn(nvars, ncausers))[[2]] * swingnumber, ncol = ndependents) 
    for (i in as.integer(1:dim(combn(nvars, ncausers))[[2]])) { 
     dependents[(swingnumber * (i - 1) + 1):(swingnumber * i), ] <- t(combn(setdiff(seq(1:nvars), independents[, i]), ndependents)) 
    } 
    swingedindependents <- matrix(, nrow = dim(combn(nvars, ncausers))[[2]] * swingnumber, ncol = ncausers) 
    for (i in as.integer(1:dim(combn(nvars, ncausers))[[2]])) { 
     for (j in as.integer(1:swingnumber)) { 
      swingedindependents[(i - 1) * swingnumber + j, ] <- independents[, i] 
     } 
    } 
    independentsdependents <- cbind(swingedindependents, dependents) 
    others <- matrix(, nrow = dim(combn(nvars, ncausers))[[2]] * swingnumber, ncol = nvars - ncausers - ndependents) 
    for (i in as.integer(1:((dim(combn(nvars, ncausers))[[2]]) * 
     swingnumber))) { 
     others[i, ] <- setdiff(seq(1:nvars), independentsdependents[i, ]) 
    } 
    causalitiestemplate <- cbind(independentsdependents, others) 
    causalitiestemplate 
} 

リスト全ての多変量の因果関係の組み合わせ。たとえば、システムの他の2つの変数に条件付けされた4変数システムでは、変数は1,2,3,4の番号に割り当てられ、この割り当ては分析の全体にわたって維持されます。

causalitycombinations(4,1,1) 

     [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 1 3 2 4 
[3,] 1 4 2 3 
[4,] 2 1 3 4 
[5,] 2 3 1 4 
[6,] 2 4 1 3 # to check whether 2nd var Grangercauses 4th var condioned on 1 and 3 
[7,] 3 1 2 4 
[8,] 3 2 1 4 
[9,] 3 4 1 2 
[10,] 4 1 2 3 
[11,] 4 2 1 3 
[12,] 4 3 1 2 

さて、

data.frame(from = causalitycombinations(4,1,1)[,1], to= causalitycombinations(4,1,1)[,2], 
       pval = c(0.5,0.6,0.1, #I just typed random p-vals here 
          0.4,0.8,0.2, 
          0.1,0.5,0.9, 
          0.0,0.0,0.1) 
       ) 

は生成:上記で

from to pval 
1  1 2 0.5 
2  1 3 0.6 
3  1 4 0.1 
4  2 1 0.4 
5  2 3 0.8 
6  2 4 0.2 
7  3 1 0.1 
8  3 2 0.5 
9  3 4 0.9 
10 4 1 0.0 
11 4 2 0.0 
12 4 3 0.1 
  1. をし、 "へ" カラムのエントリ "から"、代表番号(1,2,3,4)の代わりに変数名(例えば、 "inf"、 "gdp"、 "exc"、 "stock")を出力したいと思います。これを達成する方法は?私たちは、文字列ベクトルから位置によって名前が一致して列を更新することができますどのように文字列の代わりに数字

+1

「VAR名に番号を変換します」 - 'df1 $ fromNew < - c(" inf "、" gdp "、" exc "、" stock ")[df1 $ from]; df1 $ toNew < - c( "inf"、 "gdp"、 "exc"、 "stock")[df1 $ to] '、私はあなたの最後の文を理解していません。 – zx8754

+0

@ zx8754あなたは解決しました!これを答えとして追加することができます:df1 < - data.frame(from = causalitycombinations(4,1,1)[、1]、to =因果関係(4,1,1)[、2]、 pval = c 0,5,0.6,0.1、#ここにランダムなp値を入力したばかりです 0.4,0.8,0.2 0.1,0.5,0.9 0.0,0.0,0.1)) df1 $ fromNew < - c( "inf"、 " gdp "、" exc "、" stock ")[df1 $ from]; df1 $ toNew < - c( "inf"、 "gdp"、 "exc"、 "stock")[df1 $ to] df1 [c( "fromNew"、 "toNew"、 "pval")] –

答えて

1

との組み合わせをリストに

  • 同等に、:

    # update columns with matching name 
    df1$from <- c("inf", "gdp", "exc", "stock")[df1$from] 
    df1$to <- c("inf", "gdp", "exc", "stock")[df1$to] 
    
    # result 
    df1 
    #  from to pval 
    # 1 inf gdp 0.5 
    # 2 inf exc 0.6 
    # 3 inf stock 0.1 
    # 4 gdp inf 0.4 
    # 5 gdp exc 0.8 
    # 6 gdp stock 0.2 
    # 7 exc inf 0.1 
    # 8 exc gdp 0.5 
    # 9 exc stock 0.9 
    # 10 stock inf 0.0 
    # 11 stock gdp 0.0 
    # 12 stock exc 0.1 
    
    # input data 
    df1 <- read.table(text=" from to pval 
    1  1 2 0.5 
    2  1 3 0.6 
    3  1 4 0.1 
    4  2 1 0.4 
    5  2 3 0.8 
    6  2 4 0.2 
    7  3 1 0.1 
    8  3 2 0.5 
    9  3 4 0.9 
    10 4 1 0.0 
    11 4 2 0.0 
    12 4 3 0.1", header = TRUE) 
    
  • 関連する問題