r - 标记数据框是否包含与其他数据框相同的值,跨多个变量
问题描述
我有两个数据框,其中一个是另一个的子集。我想可视化它们(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 是否type
和case
匹配(类似于 join 函数),然后标记它们是否会加入。我似乎无法正确地用词搜索来找到任何东西。
dplyr
解决方案将受到欢迎。
谢谢。
解决方案
我们可以加入
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%
在paste
d 列 'type', 'case'
library(stringr)
df_full %>%
mutate(special = str_c(type, case) %in%
str_c(df_special$type, df_special$case))
推荐阅读
- python - 非常基本的新手python
- corda - 使用网络引导程序 4.0 操作系统添加新节点时,ByteSequence 不在白名单上或注释 @CordaSerializable 问题
- java - 关于将 StAX 与无穷无尽的 xml 文件流一起使用的问题
- angular - 如何按时间对一些数据进行排序?
- java - “同步动作完全有序”是什么意思?
- kubernetes - 如何在两个 Kubernetes 集群之间建立联邦?
- android - AlertDialog 和 AlertDialog.Builder 之间有什么区别?
- botframework - 错误。机器人是远程的,但服务 URL 是 localhost。如果没有隧道软件,您将不会收到回复
- flutter - 如何在 Flutter 中隐藏特定屏幕的状态栏?
- javascript - jQuery 对滑块变化的反应