【问题标题】:R - Create matrix from 3 raw vectorR - 从 3 个原始向量创建矩阵
【发布时间】:2016-07-14 14:10:37
【问题描述】:

我有 3 个向量如下:

A <- c("A", "B", "C", "D", "E")
B <- c("1/1/1", "1/1/1", "2/1/1", "2/1/1", "3/1/1")
C <- c(1, 1, -1, 1, -1)

我想使用这 3 个向量创建一个如下所示的矩阵:

- 1/1/1 2/1/1 3/1/1
A   1    0     0
B   1    0     0
C   0    -1    0
D   0    1     0
E   0    0     -1

其中向量AB 分别是行和列,我的数据为C。 任何帮助将不胜感激。

【问题讨论】:

标签: r matrix


【解决方案1】:

使用?xtabs

xtabs(C ~ A+B)
#   B
#A   1/1/1 2/1/1 3/1/1
#  A     1     0     0
#  B     1     0     0
#  C     0    -1     0
#  D     0     1     0
#  E     0     0    -1

【讨论】:

    【解决方案2】:

    你可以试试:

    `[<-`(array(0,c(length(unique(A)),length(unique(B))),
          list(unique(A),unique(B))),
           cbind(A,B),C)
    #  1/1/1 2/1/1 3/1/1
    #A     1     0     0
    #B     1     0     0
    #C     0    -1     0
    #D     0     1     0
    #E     0     0    -1
    

    【讨论】:

    • 您可能会将'[&lt;-'(A, cbind(i, j), C) 视为A[cbind(i, j)] &lt;- C
    【解决方案3】:

    另一个选项是在创建data.frame 之后从reshape2 acast

    library(reshape2)
    acast(data.frame(A, B, C), A~B, value.var = "C", fill =0)
    #  1/1/1 2/1/1 3/1/1
    #A     1     0     0
    #B     1     0     0
    #C     0    -1     0
    #D     0     1     0
    #E     0     0    -1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2014-07-27
      • 1970-01-01
      相关资源
      最近更新 更多