我有两个矩阵(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