2017-04-11 6 views
0

顕微鏡の細胞画像から抽出されたさまざまな特徴を含む大きな行列を持っています。異なるフィーチャは列全体に分散され、個々のセルはその行列の行全体に分散されます。しかし、測定は、各個々の細胞がそのマトリックス中に90行(時間点)を有するように、時間経過顕微鏡法から来る。したがって、この行列の次元は[cell_amount * 90; feature_amount]。行グループの集計値を持つ行列を作成します

私の目標はである:(時系列の「誘導体」)は、各セル用の後続の時点の差を計算し、次いで

    • の集合を含む新しいマトリックスを作成します各セルの差異(新しい行列の次元が[cell_amount; feature_amount]になるように)

    私は4つのセル、4つのフィーチャ(列)を持ち、各セルは3つの時点ポイント値を持つ私の問題をテストするためにRでいくつかのコードを設定しました。したがって、最初のセルは行1〜3に、2番目のセルは4〜6行に、などとなります。このことから私は、値の差を計算する:

     [,1] [,2] [,3] [,4] 
    [1,] NA NA NA NA 
    [2,] 82 29 54 22 
    [3,] 32 44 18 31 
    [4,] NA NA NA NA 
    [5,] 22 61 10 33 
    [6,] 19 64 54 35 
    [7,] NA NA NA NA 
    [8,] 59 18 6 10 
    [9,] 34 47 70 6 
    [10,] NA NA NA NA 
    [11,] 60 23 68 22 
    [12,] 17 13 12 9 
    

    ためのこれらの値の集約を含む得られたマトリックス:

    A <- matrix(sample(1:100, 4*12), ncol = 4) 
    B <- abs(A - dplyr::lag(A)) 
    B[seq(1,nrow(B), 3),] <- NA 
    

    これは、各セルの最初の行はNA値を含む行列になります各セル(この場合は分散)は、次のようになります。

     [,1] [,2] [,3] [,4] 
    [1,] 1250 112.5 648 40.5 
    [2,] 4.5 4.5 968 2 
    [3,] 312.5 420.5 2048 8 
    [4,] 924.5 50 1568 84.5 
    

    Rでこの新しい行列を計算するにはどうすればよいですか?どんな助けもありがとうございます。

  • +0

    この入力にはどのような出力がありますか?可能なソリューションをテストできるように具体的な値を教えてください。 – MrFlick

    +0

    ありがとうございます。私は問題を再公式化し、期待される出力行列を与えた。値はテスト目的のためのものです。 – user3182899

    答えて

    0

    シードなしでランダムサンプルを使用したため、Aマトリックスを再作成できません。ただし、ここではB行列の再作成があります。

    B <- matrix(scan(text=" 
    NA NA NA NA 
    82 29 54 22 
    32 44 18 31 
    NA NA NA NA 
    22 61 10 33 
    19 64 54 35 
    NA NA NA NA 
    59 18 6 10 
    34 47 70 6 
    NA NA NA NA 
    60 23 68 22 
    17 13 12 9"), ncol=4, byrow=T) 
    

    あなたが本当に行列これを維持したい場合は、多次元配列にこれを再形成することができますし、使用が関心の値を取得するために、余白の上に適用され、例えば

    apply(array(B, dim=c(3,4,4)),2:3, var, na.rm=T) 
    #  [,1] [,2] [,3] [,4] 
    # [1,] 1250.0 112.5 648 40.5 
    # [2,] 4.5 4.5 968 2.0 
    # [3,] 312.5 420.5 2048 8.0 
    # [4,] 924.5 50.0 1568 84.5 
    

    また、適切なグループ化変数を作成して使用することもできますaggregate()

    row_sample <- rep(1:3, each=nrow(B)/3) 
    aggregate(B, list(row_sample), var, na.rm=T) 
    # Group.1  V1  V2  V3  V4 
    # 1  1 1250.0000 112.5000 648.0000 40.50000 
    # 2  2 496.3333 662.3333 709.3333 193.00000 
    # 3  3 469.0000 305.3333 1084.0000 72.33333 
    
    +0

    クール、ありがとう!これは本当に私を助けます – user3182899

    関連する問題