【问题标题】:Data Manipulation and Structuring in RR中的数据操作和结构化
【发布时间】:2018-11-27 18:45:36
【问题描述】:

我有一个看起来像这样的“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 的第一行中有许多值,那么最快的方法是什么?

提前致谢

【问题讨论】:

    标签: r matrix data-structures data-manipulation


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      相关资源
      最近更新 更多