【发布时间】:2017-12-18 14:46:54
【问题描述】:
我正在使用具有 X-Y 坐标的矩阵数据集,其余列具有包含不同参数的逻辑值。给定至少一个相应的参数为真,我想找到 X-Y 的相邻坐标,然后将其作为行附加到新矩阵。以下是样本矩阵数据。
Data_1
X Y P1 P2 P3 P4
-52 32 1 0 0 1
-50 34 0 0 0 0
-50 26 0 0 0 1
-52 31 0 1 1 1
为了解决这个问题,我打算使用以下算法:
算法
# Find row wise sum
newCol <- rowSums(Data_1)
# Bind as first column with Data_1
newData <- cbind(newCol, Data_1)
# Not R code, pseduo code
if (newData[,1] != 0{
store newData[,2] and newData[,3].
Data_2 <- find neighboring coordinates to newData[,2] and newData[,3].
}
finalData <- cbind(Data_1, Data_2)
输出
X Y P1 P2 P3 P4 N1.x N1.y N2.x N2.y N3.x N3.y N4.x N4.y N5.x N5.y N6.x N6.y N7.x N7.y N8.x N8.y
-52 32 1 0 0 1 <Neighboring Coordinates---->
-50 34 0 0 0 0 <NULL>
-50 26 0 0 0 1 <Neighboring Coordinates---->
-52 31 0 1 1 1 <Neighboring Coordinates---->
当矩阵有数百万行和列时,这种方法的问题是可伸缩性。
下图显示了(x,y) 的相邻坐标。
如果可能,请提出更好的方法,谢谢。
【问题讨论】:
-
对于您的示例数据,N1.x、N1.y、N2.x、N2.y、...列中的内容是什么?
-
newCol <- t(t(newCol))这会将您的矩阵从原始矩阵转换为垂直转置,然后以与此步骤之前完全相同的格式再次转换为原始矩阵.... -
@EricWatt - 对于具有
-52, 32、N1.x, N1.y, N2.x, N2.y....的第一行,将是所有 8 个相邻坐标。其他行也是如此。 -
@sconfluentus - 谢谢。我想如果
dim(newCol)是NULL,那么我需要将其设为列,然后使用cbind()追加,但正如您所指出的那样,我确实使用另一个t()将其变为原始形式。修复了伪代码。 -
我不知道“所有 8 个邻居坐标”是什么意思。您能显示前 4 行的预期输出吗?
标签: r algorithm matrix optimization