r-使用for循环和if语句比较两个矩阵(x和y),在其中一个矩阵(y)中创建新列-可重复



我有两个矩阵(x和y(-使用下面的代码复制。

x <- structure(c(0.11, 0.91, 1.28, 0.32, 0.23, 0.45, 1.17, 0.68, 0.85, 
0.46), .Dim = c(10L, 1L))
y <- structure(c(3, 5, 7, 9, 11, 13, 18, 20, 22, 26), .Dim = c(10L, 
1L))

我想做的是使用以下For和if/else组合。我想做的是,如果x中的值<0.3,在y[i,2]中创建一个新的矩阵列,该列表示0(False,x中的值不小于0.3(或1(True,x中值大于0.3(

我不断得到错误代码";y[i,2]中的错误:下标越界">

for (i in 1:10){
if (x[i,1]<0.3){
y[i,2] == 0
} else {
y[i,2] == 1
}
}

请不要建议其他方式(即不使用for/if/else(,因为这是我被告知该项目需要的方式。

如果不先添加一列并在其中放入与y相同长度的内容,就无法将其添加到y中。您可以制作一个新的矢量并将其绑定。(这可能更容易。(

# an empty vector to put it in
z = vector(length = 10)
# the loop 
for (i in 1:10){
if (x[i, 1] < 0.3){
z[i] = TRUE
} else {
z[i] = FALSE
}
}
z
# [1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE

你可以让这变得更容易。


更新


我完全忽略了ifelse本身的力量。

# vectorize 
z <- ifelse(x < .3, T, F)) 
z
# join with y
y <- cbind(y, z) 

您可以尝试下面的代码

> cbind(y, x >= 0.3)
[,1] [,2]
[1,]    3    0
[2,]    5    1
[3,]    7    1
[4,]    9    1
[5,]   11    0
[6,]   13    1
[7,]   18    1
[8,]   20    1
[9,]   22    1
[10,]   26    1

最新更新