【发布时间】:2022-01-04 12:38:48
【问题描述】:
编辑:我已经包含了一个可重现的示例。
我正在尝试在我的一个矩阵中进行一些简单的操作。我的矩阵是包含捕获-重新捕获数据的 3D 数组。
行是个人 从 1 到 7 的列是采样时间(年) 第8栏个人性别:1男2女
libray(abind)
CH <- array(c(1,0,1,1,1,1,0), dim = c(5,7,10))
sex <- c(1,1,2,2,1)
CH_with_sex <- abind(CH, array(sex, replace(dim(CH), 2, 1)), along = 2)
CH_with_sex
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 1 0 0 1 1 1
[2,] 0 0 1 1 1 1 1 1
[3,] 1 1 1 1 0 0 1 2
[4,] 1 0 0 1 1 1 1 2
[5,] 1 1 1 1 1 0 0 1
, , 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 1 0 0 1 1 1
[2,] 0 0 1 1 1 1 1 1
[3,] 1 1 1 1 0 0 1 2
[4,] 1 0 0 1 1 1 1 2
[5,] 1 1 1 1 1 0 0 1
dim(CH_with_sex)
[1] 5 8 10
我的目标是将男性和女性从这个 3D 阵列中分离出来,并有 2 个不同的阵列:一个用于男性,另一个用于女性。我想通过过滤第 8 列来实现它,但我找不到这样做的方法。我最终会破坏或丢失矩阵结构。有什么建议吗?
我想要的男性输出是这样的:
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 1 0 0 1 1 1
[2,] 0 0 1 1 1 1 1 1
[3,] 1 1 1 1 1 0 0 1
, , 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 1 0 0 1 1 1
[2,] 0 0 1 1 1 1 1 1
[3,] 1 1 1 1 1 0 0 1
这对于女性来说:
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 1 1 0 0 1 2
[2,] 1 0 0 1 1 1 1 2
, , 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 1 1 0 0 1 2
[2,] 1 0 0 1 1 1 1 2
【问题讨论】:
-
嗨!您能否使用
dput提供一个最小且可重复的数据集? -
请包含所需的输出。 “过滤”在这里是模棱两可的:如果代表 1 的男性比代表 2 多怎么办?你想得到什么形状?
-
谢谢你们的cmets,我做了这两件事。希望它更清楚。
标签: r arrays matrix multidimensional-array