使用ifelse用二进制值填充矢量

时间:2013-03-22 11:13:48

标签: r vector

根据向量'p'中的值,我想将另一个向量中的值设置为0或1。 我尝试了以下

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
)

4 个答案:

答案 0 :(得分:10)

您不需要事先制作newvector并将其用作ifelse的参数导致错误。

试试这个......

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

但更好的只是做矢量化......

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

答案 1 :(得分:5)

只需使用:

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

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

答案 2 :(得分:2)

您还可以针对此特定情况使用findInterval

findInterval(p, .5)

答案 3 :(得分:2)

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