2017-04-11 57 views
0

我有一個大矩陣,其中包含從顯微鏡細胞圖像中提取的各種特徵。不同的特徵分佈在整個列上,矩陣行上的單個單元格。然而,測量來自時間間隔顯微術,使得每個單獨的細胞在該矩陣中具有90行(時間點)。所以這個矩陣的維數[cell_amount * 90; feature_amount。用行集合的值創建矩陣

我的目標是:

  • 計算隨後的時間點的差爲每個小區(時間序列的「衍生物」),然後
  • 創建包含的凝聚一個新的矩陣每個單元格的差異(以便新矩陣具有維度[cell_amount; feature_amount])。

我在R中設置了一些代碼來測試我的問題,其中有4個單元格,4個特徵(列),每個單元格有3個時間點值。所以第一個單元格將在1-3行,第二個在4-6行,等等。從該I計算值的差:

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,] 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 

含有用於這些值的聚合所得到的矩陣每個單元格在這種情況下的差異應該如下所示:

 [,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