我有一个离散因子,长度为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)
答案 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)