Как я могу заполнить эту матрицу (затем обобщить ее в 3D-массив) со всеми oop и используя условия тоже? в R - PullRequest
0 голосов
/ 13 февраля 2020

Я просто хочу заполнить эту матрицу, я знаю, что это очень простая проблема, но я совсем не хорош. Я не буду использовать эти цифры в матрице. Я пытался использовать для l oop, но проблема в том, что l oop показывает только последнюю итерацию. Я повторяю, я не хочу цифры от 1 до 9. У меня есть это:

(mat<-matrix(0, nrow = 3, ncol = 3))
for (i in 1:3) {
  for (j in 1:3) {
    if (j==1 & i==1) {
      mat[i,j]=6
    } else if (j==1 & i==2) {
      mat[i,j]=7
    } else if (j==1 & i==3) {
      mat[i,j]=8
    }
  }
}

Я хочу код без условий & i==1, & i==2, & i==3. Я хочу сделать еще одну переменную k от 1 до 3. Я пробовал это, но l oop показывает мне только значение 3. Большое вам спасибо.

Редактировать: Я собираюсь показать вам пример, который я хочу решить. Вы увидите, что это примерно та же проблема. У меня есть следующий фрейм данных:

base2<-c(  20, 15, 17, 23, 19, 21, 16, 22, 18)
base2.1<-c( 6,  5,  3,  4,  1,  7,  2,  9,  8)
base3<-data.frame(base2,base2.1)
names(base3)=c("age","mean")

base3

Я хочу заполнить вектор vec, где vec[1]=5 (потому что, как вы можете видеть, age=15), vec[2]=2 (потому что, age=16 ) и т. д. и т. д.

Я пробовал это только для первого элемента:

(vec<-c(rep(0,length(base3$mean))))

for (i in 1:length(base3$mean)) {
  if (base3$age[i]==15) {
    vec[1]=base3$mean[which(base3$age==15)]
      } 
}
vec

Конечно, я не хочу ставить номер 1 в этой части l oop: vec[1]=base3$mean[which(base3$age==15)

Если я хочу заполнить весь вектор, у меня есть это:

for (i in 1:length(base3$mean)) {
  for (j in sort(base3$age)) {
vec[i]=base3$mean[which(base3$age==j)]  
 }
}
vec

Но для l oop я покажу только последнюю итерацию:

# [1] 4 4 4 4 4 4 4 4 4

Я хочу следующий результат:

[1] 5 2 3 8 1 6 7 9 4

1 Ответ

0 голосов
/ 14 февраля 2020

Это просто для order vector age и использовать индекс, возвращенный к индексу вектора mean.

i <- order(base3$age)
vec <- base3$mean[i]

vec
#[1] 5 2 3 8 1 6 7 9 4

См. help("order"), а разница sort.
Однострочник

vec <- base3$mean[order(base3$age)]
...