практическая задача о R для цикла и если заявление - PullRequest
1 голос
/ 14 мая 2019

сначала у меня есть 2 функции, которые изначально являются символами.

train_address = train$address
test_address = test$address

, а затем я связываю их вместе.

address = c(train_address, test_address)

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

Моя цель - перенести все данные, которые в поезде, но не тестируются, в 0.

for (a in train_address) {
  if (!(train_address[a] %in% test_address)) {
    train_address[a] = 0
  }
}

train_address = as.factor(train_address)
test_address = as.factor(test_address)

после того, как я обработаю данные таким образом, это должно быть:

номер фактора теста + 1 = номер фактора поезда

(потому что R начинаются с 1, поэтому 0 не используется, пока я не передам некотороеданных в поезде через цикл for выше)

но на самом деле разница между числом факторов поезда и теста составляет 400 +.

Я знаю, что должно быть что-то не таккод, но я не знаю, где ...

1 Ответ

1 голос
/ 14 мая 2019

Следующие должны сделать свое дело.

Вам не нужен цикл для этого, но используйте векторизованные манипуляции.

train_address[!(train_address %in test_address)] <- 0

Объяснение:

(train_address %in test_address) дает логический вектор, где TRUE означает, что элемент в train_address находится в test_address

! отрицает, чтологический вектор

train_address[!(train_address %in test_address)] дает все элементы в train_address, которых нет в test_address.

наконец вы устанавливаете их на ноль по нашей команде train_address[!(train_address %in test_address)] <- 0

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