R中的数据处理和结构

时间:2018-06-18 21:20:29

标签: r matrix data-structures data-manipulation

我有一个' 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

我想创建两个名为' Res'和' Ind'根据Com数据中的值,将其与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的第一行中有许多值,那么最快的方法是什么?

提前致谢

1 个答案:

答案 0 :(得分:1)

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