考虑以下给定的数据;
样品DataFrame
| 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还是任何其他方法都是值得赞赏的。
发布于 2019-10-03 00:28:00
以下是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)
发布于 2019-10-03 00:34:11
使用来自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
https://stackoverflow.com/questions/58215081
复制