首页 > 解决方案 > 标记数据框是否包含与其他数据框相同的值,跨多个变量

问题描述

我有两个数据框,其中一个是另一个的子集。我想可视化它们(ggplot),使用不同的颜色指示数据帧的子集。因此,我正在寻找一种方法来识别跨数据帧的匹配,标记匹配并将该标记用作 col 美学。

这是一个简短的示例:

#create two sample dataframes
df_full <- data.frame(type = c('A', 'A', 'B', 'B', 'A'), 
                      case = c(1, 2, 1, 2, 2), 
                      val = c(3, 4, 7, 1, 5))

df_special <- data.frame(type = c('A', 'A', 'B'), 
                         case = c(1, 2, 1))

#print df for clarity                        
df_full
  type case val
1    A    1   3
2    A    2   4
3    B    1   7
4    B    2   1
5    A    2   5

df_special
  type case
1    A    1
2    A    2
3    B    1

我想要的是以下内容:

  type case val special
1    A    1   3    TRUE
2    A    2   4    TRUE
3    B    1   7    TRUE
4    B    2   1   FALSE
5    A    2   5    TRUE

我可以使用ifelse条件手动执行此操作,但在有很多潜在匹配的情况下,这变得很费力。我假设有一种简单的方法可以检查 df 是否typecase匹配(类似于 join 函数),然后标记它们是否会加入。我似乎无法正确地用词搜索来找到任何东西。

dplyr解决方案将受到欢迎。

谢谢。

标签: r

解决方案


我们可以加入

library(dplyr)
df_full %>% 
    left_join(df_special %>% 
                 mutate(special = TRUE))%>% 
    mutate(special = replace_na(special, FALSE))
type case val special
1    A    1   3    TRUE
2    A    2   4    TRUE
3    B    1   7    TRUE
4    B    2   1   FALSE
5    A    2   5    TRUE

或者另一个选项%in%pasted 列 'type', 'case'

library(stringr)
df_full %>% 
      mutate(special =  str_c(type, case) %in% 
                   str_c(df_special$type, df_special$case))

推荐阅读