【发布时间】:2021-07-21 02:46:50
【问题描述】:
背景
我在 r 中有两个 df,一个叫做 d,另一个叫做 insurance。 d 包含唯一的 ID 列表以及两个属性 gender 和 zip(与 this 问题无关)。 insurance 包含一些相同的 ID 数字,但它们不是唯一的。它们代表了人们在特定年份的健康保险计划。 insurance 表中的一些 ID 重复,因为该人在那一年拥有多个保险计划(即他们更换了保险公司)。以下是制作这些表格的一些代码:
d <- data.frame(ID = c("a","b","c","d","e","f"),
gender = c("f","f","m","f","m","m"),
zip = c(48601,60107,29910,54220,28173,44663),stringsAsFactors=FALSE)
看起来像:
| ID | gender | zip |
|---|---|---|
| a | f | 48601 |
| b | f | 60107 |
| c | m | 29910 |
| d | f | 54220 |
| e | m | 28173 |
| f | m | 44663 |
insurance <- data.frame(ID = c("a","a","c","d","f","f"),
ins_type = c("public","private","private","private","private","public"),
insurer = c("medicare","aetna","cigna","uhc","uhc","medicaid"),
stringsAsFactors = FALSE)
看起来像:
| ID | ins_type | insurer |
|---|---|---|
| a | public | medicare |
| a | private | aetna |
| c | private | cigna |
| d | private | uhc |
| f | private | uhc |
| f | public | medicaid |
这是我的目标:
我需要d 来反映d$ID 中的任何人是否有任何公共 保险,如果有,是哪家保险公司。具体来说,这意味着“查找”insurance 表并在d 中创建两个新变量:首先,一个 1/0 或是/否变量,用于永远拥有公共保险(将此变量称为 d$public);第二,它是哪家保险公司(打电话给d$insurer)。
棘手的一点是我需要d$ID 保持唯一性,因为它必须是我未在此处概述的项目的另一个方面的主键。所以这个想法是,如果任何ID 有任何公共保险条目,那么d$public 应该得到“1”或“是”或其他任何内容。
想要的结果
我想要一个如下所示的表格:
| ID | gender | zip | public | insurer |
|---|---|---|---|---|
| a | f | 48601 | 1 | medicare |
| b | f | 60107 | 0 | NA |
| c | m | 29910 | 0 | NA |
| d | f | 54220 | 0 | NA |
| e | m | 28173 | 0 | NA |
| f | m | 44663 | 1 | medicaid |
我的尝试
之前有人问过这个问题的不同版本(例如here、here),但我不太明白。
我尝试过使用连接,如下所示:
d2 <- d %>%
left_join(insurance, by=c("ID"="ID"))
这让我得到了我想要的列,但它使像 a 这样的 ID 重复,这是我不能拥有的。
感谢您的帮助!
【问题讨论】: