R 如何从循环和if语句创建二进制变量

R 如何从循环和if语句创建二进制变量,r,if-statement,for-loop,R,If Statement,For Loop,假设我有一个向量x,包含20个介于0和2之间的值 x = runif(20, 0, 2) 现在,我想在以下条件下创建另一个只包含0和1的向量y(一个二进制变量):y=0ifx

假设我有一个向量
x
,包含20个介于0和2之间的值

x = runif(20, 0, 2)
现在,我想在以下条件下创建另一个只包含0和1的向量
y
(一个二进制变量):
y=0
if
x<1
y=1

我尝试通过以下方式使用循环和
if
语句执行此操作:

x = runif(20, 0, 2) # Create a vector of 20 values between 0 and 2
y = rep(5, 20) # Create a vector of 20 values (only 5's)

for(i in 1:length(x)) # Loop that assigns values to the y vector depending on x
{
  if(x < 1)
  {
    y[i] = 0
  }
  else
  {
    y[i] = 1
  }
}
x=runif(20,0,2)#创建一个0到2之间包含20个值的向量
y=rep(5,20)#创建一个包含20个值的向量(仅5个)
对于(i in 1:length(x))#循环,根据x为y向量赋值
{
if(x<1)
{
y[i]=0
}
其他的
{
y[i]=1
}
}

但不幸的是,它没有按计划工作,因为我的
y
向量最终只包含0。我做错了什么?谢谢:)

这可以使用矢量化操作而不是循环来完成:

> x <- runif(20, 0, 2)
> y <- as.integer(x > 1)
> x
 [1] 0.06553935 1.23221386 0.39982502 0.27821193 1.15281280 0.14248373 0.09206153 1.63555223 0.44962775 0.70711450
[11] 0.93994130 1.41955732 1.95790383 0.99646643 1.38737559 1.75813075 1.32844540 0.53076589 0.96152349 1.31173062
> y
 [1] 0 1 0 0 1 0 0 1 0 0 0 1 1 0 1 1 1 0 0 1
最后,值得注意的是,您可以通过以下两种方法之一使用更复杂的表达式:

> ifelse(x >= .5 & x <= 1.5, -5, 5)
 [1]  5 -5  5  5 -5  5  5  5  5 -5 -5 -5  5 -5 -5  5 -5 -5 -5 -5

>ifelse(x>=.5&x哇!我更爱R!!!非常感谢@NPE。但是,如果我想分配0和1以外的值,我该怎么办?@SavedByJESUS:你可以使用
ifelse
,例如
ifelse(x>1,5,-5)
@NPE--或者,为了好玩,这个:
c(-5,5)[(x>1)+1]
@SavedByJESUS:
ifelse(x<2./3,0,ifelse(x<4./3,1,2))
@SavedByJESUS——要了解发生了什么,请尝试
FALSE+1;TRUE+1;c(-5,5)[c(1,2,2,2,1)]
(肯定有点模糊,但这个想法可能有用。)
> ifelse(x >= .5 & x <= 1.5, -5, 5)
 [1]  5 -5  5  5 -5  5  5  5  5 -5 -5 -5  5 -5 -5  5 -5 -5 -5 -5