Разобраться с АН в условном столбце - PullRequest
0 голосов
/ 07 мая 2018

У меня есть фрейм данных, такой как df, и я хочу создать столбцы для генерации df2.

df <- data.frame(bind_cols(x = c('N', 'Y', 'N', 'Y', 'N'),
                   y = c(NA, 'N', 'Y', 'Y', 'N')))

df2 <- data.frame(bind_cols(x = c('N', 'Y', 'N', 'Y', 'N'),
                        y = c(NA, 'N', 'Y', 'Y', 'N'),
                        any = c('N', 'Y', 'Y', 'Y', 'N'),
                        both = c('N', 'N', 'N', 'Y', 'N')))

Новый столбец 'any' должен = 'Y', если один или другой, или оба из x и y == 'Y'. Оба должны = 'Y', если оба x и y == 'Y'. Я не разобрался, как поступить с АН в первом ряду, чтобы сделать any = 'Y'. Моя текущая стратегия ниже, но даёт NA в строке 1, столбец «any», где я хочу, чтобы = «Y». Как мне изменить код, чтобы получить результат Y, даже если есть значение NA?

df2 <- df %>% 
  mutate(any = case_when(x =='Y'|y=='Y' ~'Y',
                         x != 'Y' & y != 'Y' ~ 'N'),
                both = ifelse(x=='Y'& y=='Y', 'Y', 'N')) 

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете попробовать case_when или ifelse. Используйте %in% вместо == для прямого ручка NA х

df %>% 
  mutate(any=case_when(x %in% "Y" | y %in% "Y" ~ "Y", TRUE ~ "N"),
         both=ifelse(x %in% "Y" & y %in% "Y", "Y", "N"))
  x    y any both
1 N <NA>   N    N
2 Y    N   Y    N
3 N    Y   Y    N
4 Y    Y   Y    Y
5 N    N   N    N

Нет необходимости в rowwise.

0 голосов
/ 07 мая 2018

Вы можете использовать функции any и all из базы R с помощью na.rm = T. Они оба действуют по векторам, поэтому вам нужно добавить rowwise перед mutate с, чтобы вы рассматривали значения x и y каждой строки вместе как вектор, а не все значения x и все y значений.

library(tidyverse)

df %>%
    rowwise() %>%
    mutate(any = ifelse(any(x == "Y", y == "Y", na.rm = T), "Y", "N")) %>%
    mutate(both = ifelse(all(x == "Y", y == "Y", na.rm = T), "Y", "N"))
#> Source: local data frame [5 x 4]
#> Groups: <by row>
#> 
#> # A tibble: 5 x 4
#>   x     y     any   both 
#>   <chr> <chr> <chr> <chr>
#> 1 N     <NA>  N     N    
#> 2 Y     N     Y     N    
#> 3 N     Y     Y     N    
#> 4 Y     Y     Y     Y    
#> 5 N     N     N     N

Создано в 2018-05-07 пакетом представ. (v0.2.0).

...