首页 > 解决方案 > R中的数据操作和结构化

问题描述

我有一个看起来像这样的“Exp”数据集:

  Locals   Res   Ind
1    112 7.865 4.248
2    113 4.248 5.666
3    114 5.666 2.444
4    115 2.444 7.865
5    116 7.865 4.248
6    117 4.248 6.983
7    118 5.666 3.867
8    119 2.444 2.987

我还有另一个名为“Com”的数据集,如下所示:

113 112 113
112 114 119
116 118 119
118 118 119
117 117 119
117 117 119

我想根据 Com 数据中的值创建两个名为“Res”和“Ind”的矩阵,将其与 Exp 数据的第一行 Local 匹配,并从“Res”或“Ind”中获取相应的值列取决于为其创建的矩阵。例如 - Com 数据集中的第一个值是 113,因此在 Res 矩阵中,第一个值将是 4.248 - 因为 Exp 的第一列 113 中的对应值是 4.248。使得 Res 矩阵看起来像这样

4.248   7.865   4.248
7.865   5.666   2.444
7.865   5.666   2.444
5.666   5.666   2.444
4.248   4.248   2.444
4.248   4.248   2.444

任何人都可以建议在 R 上执行此操作的简单方法。如果需要创建许多矩阵并且 Exp 的第一行中有许多值,那么最快的方法是什么?

提前致谢

标签: rmatrixdata-structuresdata-manipulation

解决方案


structure(dat1$Res[match(unlist(dat2),dat1[,1])],.Dim=dim(dat2))

[1,] 4.248 7.865 4.248
[2,] 7.865 5.666 2.444
[3,] 7.865 5.666 2.444
[4,] 5.666 5.666 2.444
[5,] 4.248 4.248 2.444
[6,] 4.248 4.248 2.444

structure(dat1$Ind[match(unlist(dat2),dat1[,1])],.Dim=dim(dat2))

     [,1]  [,2]  [,3]
[1,] 5.666 4.248 5.666
[2,] 4.248 2.444 2.987
[3,] 4.248 3.867 2.987
[4,] 3.867 3.867 2.987
[5,] 6.983 6.983 2.987
[6,] 6.983 6.983 2.987

您可以在一行中执行此操作:

lapply(Exp[-1],function(x) structure(x[match(as.matrix  (  Com),Exp[,1])],.Dim=dim(Com)))

$Res
      [,1]  [,2]  [,3]
[1,] 4.248 7.865 4.248
[2,] 7.865 5.666 2.444
[3,] 7.865 5.666 2.444
[4,] 5.666 5.666 2.444
[5,] 4.248 4.248 2.444
[6,] 4.248 4.248 2.444

$Ind
      [,1]  [,2]  [,3]
[1,] 5.666 4.248 5.666
[2,] 4.248 2.444 2.987
[3,] 4.248 3.867 2.987
[4,] 3.867 3.867 2.987
[5,] 6.983 6.983 2.987
[6,] 6.983 6.983 2.987

推荐阅读