我有一个' 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的第一行中有许多值,那么最快的方法是什么?
提前致谢
答案 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