0
我有一個數據幀vec
,我需要準備一個image.plot()
圖。的vec
的結構如下:R:用值填充矩陣不起作用
> str(vec)
'data.frame': 31212 obs. of 5 variables:
$ x : int 8 24 40 56 72 88 104 120 136 152 ...
$ y : int 8 8 8 8 8 8 8 8 8 8 ...
$ dx: num 0 0 0 0 0 0 0 0 0 0 ...
$ dy: num 0 0 0 0 0 0 0 0 0 0 ...
$ d : num 0 0 0 0 0 0 0 0 0 0 ...
注:$dx
,$dy
和$d
的值不是零,而是隻有太小本概述中顯示。
背景:數據是像素跟蹤軟件的輸出。 $ x和$ y是像素座標,而$ d是該像素的位移矢量長度(以像素爲單位)。
image.plot()
期望作爲第一和第二個參數的矩陣作爲有序向量的維數,所以我認爲sort(unique(vec$x))
和sort(unique(vec$y))
分別應該是好的。所以,我想結束image.plot(sort(unique(vec$x)),sort(unique(vec$y)), data)
第三個參數是實際數據。爲了建立這個我試過了:
# spanning an empty matrix
data = matrix(NA,length(unique(vec$x)),length(unique(vec$y)))
# filling the matrix
data[match(vec$x, sort(unique(vec$x))), match(vec$y, sort(unique(vec$y)))] = vec$d
但是,不幸的是,這是行不通的。它報告沒有錯誤,但data
不包含任何值!此作品:
for(i in c(1:length(vec$x))) data[match(vec$x[i], sort(unique(vec$x))), match(vec$y[i], sort(unique(vec$y)))] = vec$d[i]
但是速度很慢。
a)有沒有更好的方法來構建data
?
b)有沒有更好的方法來處理我的問題,反正呢?
只是爲了澄清,當時該指數'idx'是一個矩陣,矩陣中的行被解釋爲位置在被分配的矩陣中。當您使用兩個索引變量(即'data [a,b] < - x')時,''將'a'指定的行與'b'指定的列相交。 – Jthorpe 2015-02-10 17:31:30
@Jthorpe是的,沒錯。對於m =矩陣(0,5,5),比較m [cbind(c(1,3),c(2,4))] = 1'和m [c(1,3),c (2,4)]';你對前者感興趣。 – 2015-02-10 17:36:37
@Martin Morgan:這個工作非常出色!非常感謝你。它太快了! – agoldev 2015-02-10 17:40:01