Как l oop через матрицу и изменить определенные элементы? - PullRequest
0 голосов
/ 31 января 2020

Мой код на данный момент выглядит следующим образом:

for(i in 1:3500){
  if ((matrix$column[i] == 'yes')|((matrix$column[i] == 'no'))){
    matrix$contact[i] = 'maybe'

  }
}

В принципе, если элемент равен «да» или «нет», я хотел бы изменить его на «возможно». В настоящее время я получаю ошибку

1: In `[<-.factor`(`*tmp*`, i, value = "maybe") :
  invalid factor level, NA generated

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Вам не нужно использовать al oop. Вместо этого вы можете просто использовать apply:

Некоторые данные:

mtx <- matrix(NA, nrow = 8, ncol = 4)
y <- c("yes", "no", "other")
set.seed(123)
mtx <- apply(mtx, 2, function(x) sample(y, 8, replace = T)); mtx
     [,1]    [,2]    [,3]    [,4]   
[1,] "other" "other" "other" "other"
[2,] "other" "yes"   "other" "no"   
[3,] "other" "no"    "yes"   "yes"  
[4,] "no"    "no"    "yes"   "no"   
[5,] "other" "yes"   "yes"   "other"
[6,] "no"    "no"    "yes"   "no"   
[7,] "no"    "other" "other" "yes"  
[8,] "no"    "yes"   "no"    "other"

И вот как вы делаете преобразование:

apply(mtx, 2, function(x) ifelse(x=="yes"|x=="no", "maybe", x))
     [,1]    [,2]    [,3]    [,4]   
[1,] "other" "other" "other" "other"
[2,] "other" "maybe" "other" "maybe"
[3,] "other" "maybe" "maybe" "maybe"
[4,] "maybe" "maybe" "maybe" "maybe"
[5,] "other" "maybe" "maybe" "other"
[6,] "maybe" "maybe" "maybe" "maybe"
[7,] "maybe" "other" "other" "maybe"
[8,] "maybe" "maybe" "maybe" "other"
0 голосов
/ 31 января 2020

Вы получаете эту ошибку, потому что массив или вектор, который вы пытаетесь изменить, относится к типу Factor и не имеет уровня как maybe.

Если вы хотите добавить или обновить переменную factor, сначала вам нужно изменить ее на тип character. Вы должны сделать это раньше для l oop. Вы можете использовать as.character(yourfactorvariable) метод, чтобы исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...