Инструкция Ifelse для замены значения в соответствующей строке - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть кадр данных, как показано ниже:

 Col1     Col2     COl4    Col5
   A         B       NA      NA
   M         L       NA      lo
   A         N       NA      KE

Как мне сделать логику, где, если Col1 = A, заменить NA в COl4 на «Pass»?

Когда я пытаюсьиспользуя ifelse, я не получаю ожидаемый результат.

Ожидаемый результат должен быть:

 Col1     Col2     COl4    Col5
   A         B     Pass      NA
   M         L       NA      lo
   A         N     Pass      KE

Я пробовал это, но не повезло:

df$COl4<-
  ifelse(df$Col1=="A", "Pass", df$COl4)

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Нет реальной необходимости для ifelse() здесь.Вы можете использовать стандартную замену индекса.

df$COl4[df$Col1 == "A"] <- "Pass"

Это говорит о том, что мы заменяем COl4 таким, что Col1 == "A" на "Pass".Кроме того, этот метод не будет связываться с такими атрибутами, как ifelse() will.

0 голосов
/ 28 февраля 2019

Вы можете использовать case_when:

library(tidyverse)

tab <- tibble(Col1 = c("A", "M", "A"), Col2 = c("B", "L", "N"), COl4 = c(NA, NA, NA), Col5 = c(NA, "lo", "KE"))

tab %>%
  mutate(COl4 = case_when(
    Col1 == "A" ~ "Pass",
    TRUE ~ as.character(COl4))
  )
# A tibble: 3 x 4
  Col1  Col2  COl4  Col5 
  <chr> <chr> <chr> <chr>
1 A     B     Pass  NA   
2 M     L     NA    lo   
3 A     N     Pass  KE 

Преимущество использования case_when заключается в том, что у вас слишком много условий!

TRUE - для остальныхCOl4, который не нуждается ни в каких условиях).

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