我有一个列如下所示。仅对于非空元素,我希望得到如下所示的矩阵。第6列表示实际值。
1 0 0 0 0 1
0 1 0 0 0 2
0 0 0 1 0 5任何提示,什么是有效的方法来做到这一点?我应该使用哪些命令?我正在考虑在for循环中编写if循环,但不要认为它会非常有效:
abc=c('1','2','null','5','null')发布于 2014-03-31 02:15:12
假设您的示例中有错误,这实际上只是一个虚拟变量编码:
abc <- c('1','2','null','5','null')
abc <- factor(abc,levels=1:5)
cbind(model.matrix(~abc+0),orig=na.omit(abc))
# abc1 abc2 abc3 abc4 abc5 orig
#1 1 0 0 0 0 1
#2 0 1 0 0 0 2
#4 0 0 0 0 1 5如果要自动计算可能因素的范围,请尝试:
abc <- c('1','2','null','5','null')
rng <- range(as.numeric(abc),na.rm=TRUE)
abc <- factor(abc,levels=seq(rng[1],rng[2]))
cbind(model.matrix(~abc+0),orig=na.omit(abc))
# abc1 abc2 abc3 abc4 abc5 orig
#1 1 0 0 0 0 1
#2 0 1 0 0 0 2
#4 0 0 0 0 1 5发布于 2014-03-31 01:49:43
不清楚为什么这个矩阵有六个元素宽,但是如果它是长度(Abc)+1,那么就用这个表达式代替我使用的6。
> abcn <- as.numeric(abc)
> zero <- matrix(0,nrow=length(abcn[!is.na(abcn)]), ncol=6)
> zero[ cbind(1:3, which( !is.na(abcn)) ) ] <- 1
> zero[ , 6] <- abcn[!is.na(abcn)]
> zero
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 0 0 0 1
[2,] 0 1 0 0 0 2
[3,] 0 0 0 1 0 5你可以用两个库仑矩阵来索引[<-函数,这就是我在第三行要做的。其馀部分是普通矩阵索引。
https://stackoverflow.com/questions/22752331
复制相似问题