iiiiiiiiiii
m(matrix)
===========
chr tmp
a 1
y 343
b 22
c 33
x 3
现在需要在m中增加1列(ID),规则是这样的:
有一个向量: v=c('a','b','c')
当chr列在v中时,返回在v的下标,不在时返回0.
比如m的第1行chr=a, 在v中对应1,则 ID=1
而chr=y 时,不在v中,则返回0
结果:
===========
chr tmp ID
a 1 1
y 343 0
b 22 2
c 33 3
x 3 0
不知道如何写比较方便? 我想用which或match,不过也不知道怎么用? 谢谢
bjt
m <- match(x$chr,v)
m[is.na(m)] <- 0
cbind(x,m)
yihui
good
把match函数的nomatch参数直接设为0就好了:cbind(x, match(x$chr, v, nomatch=0))
bjt
呵呵,没注意到这个参数
iiiiiiiiiii
谢谢bjt
可以实现。
iiiiiiiiiii
哦 一转眼帖又长了 ^^
应该是谢谢bjt和谢益辉
rtist
[quote]引用第5楼iiiiiiiiiii于2007-08-13 07:22发表的“”:
哦 一转眼帖又长了 ^^
应该是谢谢bjt和谢益辉[/quote]
for sure
danny_liu
To:bjt
m[is.na(m)] <- 0意思是说没有missing data,right?
yihui
不是,这句话是赋值:将m中数据为NA的重新赋值为0
is.na()返回的是逻辑值,而逻辑值也是可以作下标的(往往是很方便的下标方式)
bjt
谢懒虫 不懒啊!