r语言 - 将向量转换成二维矩阵



我有这样的数据:

   total position division
 34        C      ATL
 34        C      CEN
 47        C       NE
 46        C       NW
 44        C      PAC
 42        C       SE
 57        D      ATL
 50        D      CEN
 44        D       NE
 52        D       NW
 42        D      PAC
 52        D       SE
 29        L      ATL
 34        L      CEN
 28        L       NE
 34        L       NW
 29        L      PAC
 24        L       SE
 26        R      ATL
 33        R      CEN
 25        R       NE
 29        R       NW
 24        R      PAC
 35        R       SE

我希望将其转换为二维矩阵,然后可以用于卡方检验。因此,我的输入需要看起来像:

division        position
            C       D       L       R
ATL         34      57      29      26
CEN         34      50      34      33
NE          47      44      28      25
NW          46      52      34      29
PAC         44      42      29      24
SE          42      52      24      35

简而言之,我需要在一个向量列标头中生成值,并在另一个向量行标头中生成值。在生成的2D矩阵中,每行中出现的总价值应移动到行标题和列标题的交叉处(例如,NE和D为44)。

顺序并不重要,在最终的矩阵中,任何向量都可以是行或列,并且输入总是有三列:total, foo和bar。

我怎样才能做到这一点?我不愿意在R中使用一些程序化的东西,而我的R技能目前有些欠缺。

谢谢。

这是一个基本的reshape问题(更多信息请参见?reshape)。

使用base R,您可以执行以下操作(假设您的数据名为"mydf"):

> reshape(mydf, direction = "wide", idvar = "division", timevar = "position")
  division total.C total.D total.L total.R
1      ATL      34      57      29      26
2      CEN      34      50      34      33
3       NE      47      44      28      25
4       NW      46      52      34      29
5      PAC      44      42      29      24
6       SE      42      52      24      35

也可以使用xtabs。对给定组合的多个值求和:

> xtabs(total ~ division + position, mydf)
        position
division  C  D  L  R
     ATL 34 57 29 26
     CEN 34 50 34 33
     NE  47 44 28 25
     NW  46 52 34 29
     PAC 44 42 29 24
     SE  42 52 24 35

另一种方法是创建一个矩阵:

matrix(df$total, ncol=4, dimnames=list(unique(df$division), unique(df$position)))
##      C  D  L  R
## ATL 34 57 29 26
## CEN 34 50 34 33
## NE  47 44 28 25
## NW  46 52 34 29
## PAC 44 42 29 24
## SE  42 52 24 35

相关内容

  • 没有找到相关文章

最新更新