这里我有一个样本数据集,我的目标是生成矩阵(下面解释)
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。
对于第一个案例,,,我正在寻找这样的东西:
#For ID = 1
OZ1 OZ2 OZ3
DZ1 0 0 1
DZ2 0 0 0
DZ3 2 0 0我需要为大约500个独特的ID做这件事,用于大约4000个观测。我最好的猜测是使用一个循环函数,其中我写函数来生成这个矩阵。
第二部分是获得另一个矩阵,如下所示:
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是字符)。我在这个论坛上看了许多其他问题,但似乎没有一个问题适合我的情况。
因此,一如既往,你的时间和帮助是非常感谢的!
发布于 2022-10-05 04:42:41
第一部分:
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)
第二部分:
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 0https://stackoverflow.com/questions/73955969
复制相似问题