почему ifelse-функция создает NA - PullRequest
0 голосов
/ 07 ноября 2019

ifelse производит NA

m <- tracking_new_table$CowId=="807439"
ifelse (m==T , tracking_new_table$V1=="8","")

Я должен получить "8" в столбце VI, когда условие выполнено. Вместо этого я получаю NA. В других строках, где условие НЕ выполняется, я получаю "", что я и хотел. данные

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

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

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

Однако вы можете сделать что-то вроде этого (обратите внимание, что я трактую CowID как целое число / число и V1 как символ):

tracking_new_table <- data.frame(
  CowID = c(32394, 807439, 967094, 926699),
  V1 = c("", "", "", "")
)

m <- tracking_new_table$CowID == 807439

# This will replace the value in V1
tracking_new_table$V1 <- ifelse(m == T, "8", "")
0 голосов
/ 07 ноября 2019
  • ifelse возвращает одно из двух значений, в зависимости от условий теста. Это не функция управления потоком, которая выполняет фрагмент кода один или фрагмент кода два на основе условия.
0 голосов
/ 07 ноября 2019

Вероятно, вам нужно

tracking_new_table$V1 <- ifelse (m, 8,"")

, что также можно сделать с помощью

tracking_new_table$V1 <- c("", 8)[m + 1]
...