如何将离散因子与大矩阵联系起来

时间:2014-08-27 20:15:16

标签: r matrix cbind

我有一个离散因子,长度为79.

[1] 4 6 6 4 6 1 6 4 1 6 1 4 6 1 1 1 6 6 6 6 6 4 1 6 6 4 6 6 1 1 6 4 6 1 6 6 4 4
[39] 6 6 4 1 1 4 1 1 6 1 1 6 6 1 1 6 4 1 1 6 1 6 6 1 6 6 6 6 1 1 1 1 6 1 1 1 1 1
[77] 6 6 1
Levels: 1 4 6

我试图将这个离散因子压缩到一个大尺寸的矩阵:79行乘1921列。我被告知我的最终结果应该是添加了列的原始矩阵,但我不确定如何处理这个问题。提前谢谢。

这是我将该因子与矩阵联系起来的代码:

dd1 = mat.x
for(v in levels(X)){
    nv = rep(0, length(X))
    nv[X==v] = 1
    dd1 = cbind(dd1, nv)
}

我收到此警告消息:

  

警告讯息:

     

1:在cbind(dd1,nv)中:

     

结果行数不是向量长度的倍数(arg 2)

     

2:在cbind(dd1,nv)中:

     

结果行数不是向量长度的倍数(arg 2)

     

3:在cbind(dd1,nv)中:

     

结果行数不是向量长度的倍数(arg 2)

2 个答案:

答案 0 :(得分:1)

我认为你的问题只是一个错字。使用样本数据

mat.x <- matrix(1, nrow=17, ncol=4)
X <- factor(sample(c(4,6,10), 17, replace=T))

此代码有效

dd1 = mat.x
for(v in levels(X)){
    nv = rep(0, length(X))
    nv[X==v] = 1
    dd1 = cbind(dd1, nv)
}

请注意,我必须将nv[y==v] = 1更改为nv[X==v] = 1,因为您未在问题的任何位置定义y

答案 1 :(得分:0)

matrix中的所有元素必须是同一个类。使用data.frame或data.table代替

 data.frame(vec, mat)