首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R数据处理矩阵

问R数据处理矩阵
EN

Stack Overflow用户
提问于 2014-03-31 01:37:46
回答 2查看 80关注 0票数 0

我有一个列如下所示。仅对于非空元素,我希望得到如下所示的矩阵。第6列表示实际值。

代码语言:javascript
复制
1 0 0 0 0 1

0 1 0 0 0 2

0 0 0 1 0 5

任何提示,什么是有效的方法来做到这一点?我应该使用哪些命令?我正在考虑在for循环中编写if循环,但不要认为它会非常有效:

代码语言:javascript
复制
abc=c('1','2','null','5','null')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-31 02:15:12

假设您的示例中有错误,这实际上只是一个虚拟变量编码:

代码语言:javascript
复制
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

如果要自动计算可能因素的范围,请尝试:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2014-03-31 01:49:43

不清楚为什么这个矩阵有六个元素宽,但是如果它是长度(Abc)+1,那么就用这个表达式代替我使用的6。

代码语言:javascript
复制
> 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

你可以用两个库仑矩阵来索引[<-函数,这就是我在第三行要做的。其馀部分是普通矩阵索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22752331

复制
相关文章

相似问题

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