首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用矩阵值作为指标

使用矩阵值作为指标
EN

Stack Overflow用户
提问于 2015-08-31 15:35:07
回答 3查看 105关注 0票数 2

我在做Fisher的排列测试,在这个测试中,我必须生成治疗状态的所有组合。

我们有4名受试者,其中2名正在接受治疗。使用combn,我可以生成所有被治疗对象的组合。例如,第一行意味着处理第一和第二主题。

代码语言:javascript
运行
复制
t(combn(4, 2))

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

如何将此矩阵转换为治疗状态矩阵,如下所示:

代码语言:javascript
运行
复制
      [,1] [,2] [,3] [,4]
[1,]    1    1    0   0
[2,]    1    0    1   0
...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-01 03:03:24

张贴我的意见作为一个解决方案。这是对“Heroka”建议的修改。+将把logical转换为numeric,并且应该比as.integer更快。

代码语言:javascript
运行
复制
+(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
票数 3
EN

Stack Overflow用户

发布于 2015-08-31 15:53:05

使用基本-R:

代码语言:javascript
运行
复制
res <- t(apply(t(combn(4,2)),MARGIN=1,FUN=function(x){
  return(as.numeric(1:4 %in% x))
}))
> res
     [,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
票数 6
EN

Stack Overflow用户

发布于 2015-08-31 16:01:00

不如就这样:

代码语言:javascript
运行
复制
out <- matrix(0L, nrow = nrow(x), ncol = max(x))

for (i in 1:nrow(x)) out[i, x[i, ]] <- 1L

> out
     [,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

我们也可以在没有循环的情况下做到这一点,尽管它的可读性可能有点差(谢谢@Frank提供的技巧):

代码语言:javascript
运行
复制
m <- matrix(0L, choose(4, 2), 4)
m[cbind(rep(1:choose(4, 2), each = 2), c(combn(4, 2)))] <- 1L

很容易包装成一个函数:

代码语言:javascript
运行
复制
participants <- function(m, n){
  if (n > m) stop( )
  mcn <- choose(m, n)
  out <- matrix(0L, mcn, m)
  out[cbind(rep(1:mcn, each = n), c(combn(m, n)))] <- 1L
  out
}

> participants(6, 5)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    1    1    1    0
[2,]    1    1    1    1    0    1
[3,]    1    1    1    0    1    1
[4,]    1    1    0    1    1    1
[5,]    1    0    1    1    1    1
[6,]    0    1    1    1    1    1
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32314905

复制
相关文章

相似问题

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