R:如何将二进制交互数据帧转换为矩阵?

时间:2017-03-30 13:54:07

标签: r

我在R中有一个交互数据框,如下所示:

> interaction
     x y   z
[1,] 4 1 112
[2,] 3 1 104
[3,] 2 4  19
[4,] 1 3 154
[5,] 3 5 332
[6,] 4 1 187
[7,] 5 5 489
[8,] 2 2 149

我想将其转换为矩阵,将x作为rownames,将y作为colnames,并将z作为它们的交互值,x,y可以取相同的值。

有谁知道如何转换?也许只是R中的一步。  非常感谢你! ------------------- 2017年3月31日-------------------------- ------------- 或者还有我的问题的另一版:

interactions <-data.frame(x=c(40,30,20,10,30,40,50,80),y=c(50,10,40,30,50,10,50,90),z=c(112,104,19,154,332,187,489,149))

m <- matrix(0,10,10)

colnames(m)<-c(10,20,30,40,50,60,70,80,90,100)
rownames(m)<-c(10,20,30,40,50,60,70,80,90,100)

如何将交互数据转换为矩阵“m”。 谢谢!

1 个答案:

答案 0 :(得分:0)

这是什么事......?它假定您要添加重复项 - 例如第1行和第6行((4,1))。 (请在下面的评论中查看更好的解决方案!)

intn <- data.frame(x=c(4,3,2,1,3,4,5,2),y=c(1,1,4,3,5,1,5,2),z=c(112,104,19,154,332,187,489,149))

m <- matrix(0,nrow=max(intn$x),ncol=max(intn$y))

for(i in seq_len(nrow(intn))) {
       m[intn$x[i],intn$y[i]] <- m[intn$x[i],intn$y[i]] + intn$z[i]
       }


m
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0  154    0    0
[2,]    0  149    0   19    0
[3,]  104    0    0    0  332
[4,]  299    0    0    0    0
[5,]    0    0    0    0  489

在回答后续问题时 - 如果有更多可能的x和y值,您仍然可以使用xtabs但是使用有效的x和y值添加一些虚拟数据。行名和列名将是组合的虚拟和实际值(作为字符而不是数字)。像这样......

xvals <- c(-2,0,1,2,3,4,5,2.5,7) #possible x values
yvals <- c(-1,1,2,2.5,3,4,5,6,7) #possible y values
dum <- data.frame(x=xvals,y=yvals) #xvals and yvals need to be same length
dum$z <- 0

m2 <- xtabs(z~x+y,rbind(dum,intn))

m2

     y
x      -1   1   2 2.5   3   4   5   6   7
  -2    0   0   0   0   0   0   0   0   0
  0     0   0   0   0   0   0   0   0   0
  1     0   0   0   0 154   0   0   0   0
  2     0   0 149   0   0  19   0   0   0
  2.5   0   0   0   0   0   0   0   0   0
  3     0 104   0   0   0   0 332   0   0
  4     0 299   0   0   0   0   0   0   0
  5     0   0   0   0   0   0 489   0   0
  7     0   0   0   0   0   0   0   0   0