首页 > 解决方案 > 使用 R/dplyr 过滤列?

问题描述

我有一个简单的 Q... 我有一个数据集,需要按某些参数进行过滤。我希望在 R 中有一个解决方案?

假人案例:

colour  age animal
red     10  dog
yellow  5   cat
pink    6   cat

我想对这个数据集进行分类,例如:

如果颜色为“红色”或“粉红色”且年龄 <7 且动物为“猫”,则 = 类别 1。否则为类别 2。

输出将是:

colour  age animal category
red     10  dog      2
yellow  5   cat      2
pink    6   cat      1

有没有办法操纵 dplyr 来实现这一点?我是临床医生而不是生物信息学家,所以放轻松!

标签: rdplyr

解决方案


我喜欢case_whendplyr 中使用 mutate 设置更复杂的选择的功能。

library(tidyverse)

df <- data.frame(colour = c("red", "yellow", "pink", "red", "pink"),
              age = c(10, 5, 6, 12, 10),
              animal = c("dog", "cat", "cat", "hamster", "cat"))
df
#>   colour age  animal
#> 1    red  10     dog
#> 2 yellow   5     cat
#> 3   pink   6     cat
#> 4    red  12 hamster
#> 5   pink  10     cat

df <- mutate(df, category = case_when( 
        ((colour == "red" | colour == "pink") & age < 7 & animal == "cat") ~ 1,
         (colour == "yellow" | age != 5 & animal == "dog")                 ~ 2,
         (colour == "pink" | animal == "cat")                              ~ 3,
         (TRUE)                                                            ~ 4) )
df
#>   colour age  animal category
#> 1    red  10     dog        2
#> 2 yellow   5     cat        2
#> 3   pink   6     cat        1
#> 4    red  12 hamster        4
#> 5   pink  10     cat        3

reprex 包(v0.3.0)于 2021-01-17 创建


推荐阅读