R 基于组标识符合并数据集
我有两个数据集,有两种不同类型的观察结果。观察在不同的日子进行,并在不同的时间间隔进行记录 两个记录都有一个序列号,用于识别进行观察的一组人员。例如,序列号111表示一组人。这个群体由不同数量的人组成。属于这些群体的人数各不相同。例如,111组由3人组成。在日记中,我们可以通过序列和id1变量识别属于不同群体的人。例如,序列号111和ID12意味着观察是由111组的2号人员进行的。还有一个日期变量,表示进行观察的一周中的一天。Day变量取值范围为1星期日到7星期日 如果在df1中,我们每人有1次观察,那么在df2中,每人必须进行2次观察。根据序列号、id1和id2可以确定进行观察的人。Id2用于区分周-日观测值。例如,id 111、id1 3和id2 2可解释为来自组111的2号人员进行的2天观察。观察的星期日同样由day变量保存 我想找出那些在同一天在两本日记中记录信息的人。那么,在同一天填写两份记录的个人是谁。问题是,在df2中有2个观察值,而在df1中,每个人只有一个,这使得合并变得困难 我基于serial和id1进行了合并,但它们不是唯一标识符。我试图创建一个新变量,并在“日”级别进行合并 如何在每日级别合并这两个数据集R 基于组标识符合并数据集,r,dataframe,R,Dataframe,我有两个数据集,有两种不同类型的观察结果。观察在不同的日子进行,并在不同的时间间隔进行记录 两个记录都有一个序列号,用于识别进行观察的一组人员。例如,序列号111表示一组人。这个群体由不同数量的人组成。属于这些群体的人数各不相同。例如,111组由3人组成。在日记中,我们可以通过序列和id1变量识别属于不同群体的人。例如,序列号111和ID12意味着观察是由111组的2号人员进行的。还有一个日期变量,表示进行观察的一周中的一天。Day变量取值范围为1星期日到7星期日 如果在df1中,我们每人有1次
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")))
df2
样本数据结果:
serial id1 id2 Day
12 1 1 1
123 1 1 3
123 2 1 2
10 1 1 4
10 2 1 2
使用合并:
out您可以尝试如下合并
merge(df1,df2,all.x = T)[1:4]
以致
> merge(df1,df2,all.x = T)[1:4]
serial id1 Day id2
1 10 1 4 1
2 10 2 2 1
3 12 1 1 1
4 123 1 3 1
5 123 2 2 1
您可以使用data.table通过更新联接将相应的id2值从df2添加到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
非常感谢我尝试了这个,我收到了丢失的id2值的重复值用:out[!is.naout$id2,]
> merge(df1,df2,all.x = T)[1:4]
serial id1 Day id2
1 10 1 4 1
2 10 2 2 1
3 12 1 1 1
4 123 1 3 1
5 123 2 2 1
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