r - 根据组标识符合并数据集
问题描述
我有 2 个数据集,有 2 种不同类型的观察结果。这些观察是在不同的日子里进行的,并以不同的时间间隔记录下来。
两个记录都有一个序列号,用于识别进行观察的一组人。例如序列号 111 表示一群人。这个小组是由不同数量的人组成的。属于这些群体的人数各不相同。例如组 111 由 3 人组成。在日记中,我们可以通过变量来识别属于不同群体的人serial
。id1
例如serial 111 and id1 2
,表示观察是由组 111 中的第二个人进行的。还有一个Day
变量表示进行观察的工作日。该Day
变量从 中获取值1(Monday) to 7 (Sunday)
。
如果df1
我们每人有 1 次观察,则df2
每个人必须进行 2 次观察。可以根据 来识别进行观察的人serial, id1 and id2
。Id2
用于在工作日观察之间产生差异。例如 id 111、id1 3 和 id2 2 可以解释为组 111 中的第 2 个人进行的 2 天观察。观察的星期几同样由Day
变量保存。
我想找出那些在同一天在两本日记中记录信息的人。那么,谁是在同一天填写这两个记录的人。问题是,df2
有 2 个观察值,而df1
每人只有一个,这使得合并变得困难。
我合并基于serial and id1
但它们不是唯一标识符。我试图创建一个新变量并在“日”级别合并。
如何合并每日级别的 2 个数据集?
library(dplyr)
df1<-df1 %>%
mutate(index = group_indices_(df1, .dots=c("serial", "id1")))
df2<-df2 %>%
mutate(index = group_indices_(df2, .dots=c("serial", "id1", "id2")))
样品日期:
df1
structure(list(serial = c(12, 123, 123, 10, 10), id1 = c(1, 1,
2, 1, 2), Day = c(1, 3, 2, 4, 2)), class = "data.frame", row.names = c(NA,
-5L))
df2
structure(list(serial = c(12, 12, 123, 123, 123, 123, 10, 10,
10, 10, 10, 10), id1 = c(1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 3, 3),
id2 = c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2), Day = c(1, 6,
3, 7, 2, 7, 4, 7, 2, 7, 4, 7), index = c(7L, 8L, 9L, 10L,
11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L)), row.names = c(NA, -12L
), class = "data.frame")
样本数据结果:
serial id1 id2 Day
12 1 1 1
123 1 1 3
123 2 1 2
10 1 1 4
10 2 1 2
解决方案
您可以使用 data.table 将相应的id2
值从df2
to添加到df1
更新连接
library(data.table)
setDT(df1)
setDT(df2)
df1[df2, id2 := i.id2, on = .(serial, id1, Day)]
df1
# serial id1 Day id2
# 1: 12 1 1 1
# 2: 123 1 3 1
# 3: 123 2 2 1
# 4: 10 1 4 1
# 5: 10 2 2 1
推荐阅读
- python - 如何从 Pandas DataFrame 中的一行获取值?
- spring-boot - Spring Boot 2 2.3 /2.4 自动关闭并关闭 JPA EntityManagerFactory hikari 池
- nuxt.js - 在 Nuxt/Contentful 项目中更改语言/区域设置
- firebase - Firebase 云功能 - 在创建用户时写入数据库
- angular - 如何测试子组件的类属性?
- .net - 使用提琴手跟踪本地主机流量
- ag-grid - 是否可以使用 Ag-grid 图表库呈现仪表图表?
- javascript - 当用户点击输入字段时,我正在尝试禁用表单提交按钮
- django - 拥有数百万条记录的 Django 守护者
- reactjs - 在输入字段中隐藏部分文本