R:带有值的填充矩阵不起作用

时间:2015-02-10 17:23:15

标签: r

我有一个数据框vec,我需要为image.plot()绘图做准备。 vec的结构如下:

> 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)有没有更好的方法来处理我的问题呢?

1 个答案:

答案 0 :(得分:3)

R允许通过两列矩阵索引矩阵,其中索引的第一列被解释为行索引,第二列被解释为列索引。因此,将索引创建为数据为两列矩阵

idx = cbind(match(vec$x, sort(unique(vec$x))),
            match(vec$y, sort(unique(vec$y))))

并使用

data[idx] = vec$d