【问题标题】:Conditional Filtering using R使用 R 进行条件过滤
【发布时间】:2019-10-03 16:34:11
【问题描述】:

考虑下面给定的数据框;

示例数据帧

| 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 或任何其他方法都可以使用。

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一个基本的 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)
    

    【讨论】:

      【解决方案2】:

      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 
      

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 2021-11-25
        • 2018-02-21
        • 1970-01-01
        • 2016-07-14
        • 1970-01-01
        • 1970-01-01
        • 2020-05-25
        • 2016-11-13
        相关资源
        最近更新 更多