我正在进行Fisher的置换测试,其中必须生成治疗状态的所有组合。

我们有4个主题,其中2个已接受治疗。使用combn,我可以生成已处理主题的所有组合。例如,第一行意味着对第一和第二主题进行了治疗。

t(combn(4, 2))

     [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    1    4
[4,]    2    3
[5,]    2    4
[6,]    3    4


我如何从此矩阵转到治疗状态矩阵,如下所示:

      [,1] [,2] [,3] [,4]
[1,]    1    1    0   0
[2,]    1    0    1   0
...

最佳答案

发表我的评论作为解决方案。这是@Heroka建议的修改。 +logical转换为numeric,并且应比as.integer快。

+(t(combn(4,2, FUN=function(x) 1:4 %in% x)))
#     [,1] [,2] [,3] [,4]
#[1,]    1    1    0    0
#[2,]    1    0    1    0
#[3,]    1    0    0    1
#[4,]    0    1    1    0
#[5,]    0    1    0    1
#[6,]    0    0    1    1

08-24 13:27