首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中为与唯一ID相关联的多个观察创建一个原产地-目的地矩阵?

问如何在R中为与唯一ID相关联的多个观察创建一个原产地-目的地矩阵?
EN

Stack Overflow用户
提问于 2022-10-05 04:34:56
回答 1查看 56关注 0票数 0

这里我有一个样本数据集,我的目标是生成矩阵(下面解释)

代码语言:javascript
复制
ID <- c(1,1,1,
        2,2,
        3,3,3,3,3,3,
        4,4,4,
        5,5,5,5,5,5)
OZ <- c("OZ1", "OZ1", "OZ3", 
        "OZ3", "OZ3", 
        "OZ1", "OZ3", "OZ1", "OZ3", "OZ1", "OZ3", 
        "OZ1", "OZ2", "OZ3",
        "OZ2", "OZ3", "OZ2", "OZ1", "OZ3", "OZ2")
DZ <- c("DZ3", "DZ3", "DZ1", 
        "DZ1", "DZ2",
        "DZ3", "DZ1", "DZ3", "DZ1", "DZ3", "DZ1",
        "DZ3", "DZ3", "DZ1",
        "DZ3", "DZ2", "DZ3", "DZ3", "DZ1", "DZ3")
        
OD <- data. Frame(ID, OZ, DZ)

我想要做的是生成两组矩阵,一个用于每个ID,另一个用于所有ID。

对于第一个案例,,,我正在寻找这样的东西:

代码语言:javascript
复制
#For ID = 1
       OZ1  OZ2  OZ3
  DZ1   0    0    1
  DZ2   0    0    0
  DZ3   2    0    0

我需要为大约500个独特的ID做这件事,用于大约4000个观测。我最好的猜测是使用一个循环函数,其中我写函数来生成这个矩阵。

第二部分是获得另一个矩阵,如下所示:

代码语言:javascript
复制
ID  OZ1DZ1  OZ1DZ2  OZ1DZ3  OZ2DZ1  OZ2DZ2  OZ2DZ3  OZ3DZ1  OZ3DZ2  OZ3DZ3
1     0       0        2      0        0       0       1       0      0
2     0       0        0      0        0       0       1       1      0
3     0       0        1      0        0       0       1       0      0
4     0       0        1      0        0       1       1       0      0
5     0       0        1      0        0       3       1       1      0

在试图解决这个问题时,我查看了https://cran.r-project.org/web/packages/od/vignettes/od.html并尝试了OD_matrix <- od_to_odmatrix(OD),它没有给我任何计数(大概是因为OZ和DZ是字符)。我在这个论坛上看了许多其他问题,但似乎没有一个问题适合我的情况。

因此,一如既往,你的时间和帮助是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-05 04:42:41

第一部分:

代码语言:javascript
复制
 table(rev(OD))
, , ID = 1

     OZ
DZ    OZ1 OZ2 OZ3
  DZ1   0   0   1
  DZ2   0   0   0
  DZ3   2   0   0

, , ID = 2

     OZ
DZ    OZ1 OZ2 OZ3
  DZ1   0   0   1
  DZ2   0   0   1
  DZ3   0   0   0

, , ID = 3

     OZ
DZ    OZ1 OZ2 OZ3
  DZ1   0   0   3
  DZ2   0   0   0
  DZ3   3   0   0

, , ID = 4

     OZ
DZ    OZ1 OZ2 OZ3
  DZ1   0   0   1
  DZ2   0   0   0
  DZ3   1   1   0

, , ID = 5

     OZ
DZ    OZ1 OZ2 OZ3
  DZ1   0   0   1
  DZ2   0   0   1
  DZ3   1   3   0

如果需要列表格式的结果,则应该执行asplit(table(rev(OD)),3)

第二部分:

代码语言:javascript
复制
 with(OD, table(ID, interaction(OZ, DZ, sep = "", lex.order = TRUE)))
   
ID  OZ1DZ1 OZ1DZ2 OZ1DZ3 OZ2DZ1 OZ2DZ2 OZ2DZ3 OZ3DZ1 OZ3DZ2 OZ3DZ3
  1      0      0      2      0      0      0      1      0      0
  2      0      0      0      0      0      0      1      1      0
  3      0      0      3      0      0      0      3      0      0
  4      0      0      1      0      0      1      1      0      0
  5      0      0      1      0      0      3      1      1      0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73955969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档