Условная фильтрация с использованием R - PullRequest
0 голосов
/ 03 октября 2019

Рассмотрим приведенный ниже кадр данных;

Пример кадра данных

| Name | Age | Type |
---------------------
| EF   | 50  |  A   |
| GH   | 60  |  B   |
| VB   | 70  |  C   |

Код для выполнения фильтра

df2 <- df1 %>% filter(Type == 'C') %>% select(Name)

Приведенный выше код предоставит мне фрейм данных с одним столбцом и строкой.

Я хотел бы выполнить условный фильтр, в котором, если определенный тип отсутствует, он должен считать имя NULL / NA.

Пример

df2 <- df1 %>% filter(Type = 'D') %>% select(Name)

Must give an output of;

| Name |
--------
|  NA  |

Вместо выдачи ошибки. Любые материалы будут действительно полезны. Подойдут либо DPLYR, либо любые другие методы.

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Вот базовый подход R:

name <- df[df$Name == "D", "Name"]
ifelse(identical(name, character(0)), NA, name)

[1] NA

Если имя не соответствует D, операция подмножества вернет character(0). Мы можем сравнить выходные данные с этим, а затем вернуть NA в зависимости от ситуации.

Данные:

df <- data.frame(Name=c("EF", "GH", "VB"), 
                Age=c(50, 60, 70), 
                Type=c("A", "B", "C"),
                stringsAsFactors=FALSE)
0 голосов
/ 03 октября 2019

Подход с complete из tidyr будет:

library(dplyr)
library(tidyr)

df1 %>% 
  complete(Type = LETTERS) %>%  # Specify which Types you'd expect, other values are filled with NA
  filter(Type == 'D') %>% 
  select(Name)
# A tibble: 1 x 1
#   Name 
#   <fct>
# 1 NA 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...