2013-03-22 52 views
4

根据在矢量“P”我想在另一个载体中设置的值的值,以0或1 我尝试以下使用装满二进制值向量ifelse

newvector=rep(0,length(p)) 
newvector=ifelse(p>=0.5,newvector=1,newvector=0) 

但是,这将引发错误,那ifelse有未使用的参数

向量p

c(0.691401225261269, 0.433129612442971, 0.715983054119369, 0.886747655276408, 
0.768369966075636, 0.619451618025444, 0.747447691612602, 0.787480458130569, 
0.29095065207117, 0.703299386664627, 0.72613890310703, 0.244542050906673, 
0.424358969255879, 0.244542050906673, 0.405127250273614, 0.365573918723265, 
0.277863840689181, 0.656827737910484, 0.762318455515624, 0.839076103987831, 
0.337670440659204, 0.781335609699773, 0.815504546491645, 0.671220524010401 
) 

回答

8

您无需事先制作newvector并将其用作参数ifelse正在导致错误。

尝试......

newvector <- ifelse(p>=0.5 , 1 , 0) 

但即使是更好的只是做了矢量化...

newvector <- as.integer(p >= 0.5) 
+0

'ifelse'是矢量化的。 – Roland 2013-03-22 11:22:21

+1

第二种方法。当直接矢量操作就足够时,通常避免“如果...”。 – 2013-03-22 11:23:48

+1

或'(p> = 0.5)* 1' – Arun 2013-03-22 12:04:42

4

只需使用:

newvector <- ifelse(p>=0.5,1,0) 

ifelse的第二个和第三个参数不是表达式,而是要返回的值。

+0

dang it我怎么可能错过了这个? Thx的答案,我现在感到非常愚蠢 – Rickyfox 2013-03-22 11:16:26

+3

永远不要低估R的力量,让你感到愚蠢:-) – juba 2013-03-22 11:17:52

2

您也可以使用findInterval对于这种特殊情况:

findInterval(p, .5) 
2

在这种情况下,您可以使用newvector<-round(p)而不是ifelse

+0

只要你知道'p <1.5'总是对的 - 并且'p> -0.5'也是如此。所以在一般情况下要谨慎:-) – 2013-03-22 11:26:18