【发布时间】:2022-07-03 07:05:40
【问题描述】:
请帮我解决这个我整天都在苦苦挣扎的问题哈哈,Python 或 R 的解决方案都很好! 请帮助我真的卡住了!!!
我有两个数据框 - df1 有 44 行,df2 有 100 行,它们都有这些列: ID、身份 (0,1)、年龄、性别、种族、民族、身高、体重
对于 df1 中的每一行,我需要在 df2 中找到一个 age 匹配项:
- 可以是精确的年龄匹配,但应该使用的标准是 - df2[age]-5
- 我需要一个列表/字典来存储 df1 的年龄匹配项及其 ID
- 然后我需要从df2中随机选择2个ID作为df1年龄的最终匹配
- 我还需要确保 2 个 df2 匹配项与 df1 具有相同的性别和种族
我尝试过 R 和 Python,但都停留在嵌套循环部分。 我不确定如何遍历 df1 和 df2 的每条记录,将 df1 age 与 df2 age-5 和 df2 age+5 进行比较,并存储匹配项
以下是 df1 和 df2 的示例数据格式: |身份证 |性别 |年龄 |种族 | | -------- | -------------- |--------|--------| | 284336 |女| 42.8 | 2 | | 294123 |男| 48.5 | 1 |
这是我在 R 中尝试过的:
id_match <- NULL
for (i in 1:nrow(gwi_case)){
age <- gwi_case$age[i]
gender <- gwi_case$gender[i]
ethnicity <- gwi_case$hispanic_non[i]
race <- gwi_case$race[i]
x <- which(gwi_control$gender==gender & gwi_control$age>=age-5 & gwi_control$age<=age+5 & gwi_control$hispanic_non==ethnicity & gwi_control$race==race)
y <- sample(x, min(2, length(x)))
id_match <- c(id_match, y)
}
id_match <- id_match[!duplicated(id_match)]
length(id_match)
【问题讨论】:
-
您能向我们展示您尝试使用哪种语言的尝试吗?
-
不要分享图片。分享数据
-
在 R 中,这称为非等连接。搜索那个。你会找到解决问题的方法
-
@onyambu 我已经做了一些研究,不幸的是这不是我在这里寻找的
-
@C.Nivs 见上面的代码,谢谢!
标签: python r dataframe nested matching