R 按组id合并两个不同长度的数据帧
我正在尝试按组id合并两个数据帧。但是,两个数据帧的长度不同,并且在第二个数据帧中缺少某些组的某些元素。在合并的文件中,某个组缺少的元素应该是NAs 数据看起来像这样R 按组id合并两个不同长度的数据帧,r,merge,R,Merge,我正在尝试按组id合并两个数据帧。但是,两个数据帧的长度不同,并且在第二个数据帧中缺少某些组的某些元素。在合并的文件中,某个组缺少的元素应该是NAs 数据看起来像这样 df1 <- data.frame(id = c(1,1,1,2,3,3,4), x = c("a", "b", "c", "d", "e", "f", "g")) df2 <- data.frame(id = c(1,1,2,3,4), y = c("A", "B", "D", "E", "G")) df1此数据。
df1 <- data.frame(id = c(1,1,1,2,3,3,4), x = c("a", "b", "c", "d", "e", "f", "g"))
df2 <- data.frame(id = c(1,1,2,3,4), y = c("A", "B", "D", "E", "G"))
df1此数据。表解决方案可能有效
首先,为每个组创建行id。这些行id上的join by id
library(data.table)
dt1 <- data.table(id = c(1,1,1,2,3,3,4), x = c("a", "b", "c", "d", "e", "f", "g"))
dt2 <- data.table(id = c(1,1,2,3,4), y = c("A", "B", "D", "E", "G"))
#rumber rows by group
dt1[ , row_id := seq.int(1:.N), by = .(id)]
dt2[ , row_id := seq.int(1:.N), by = .(id)]
dt1[dt2, y := i.y, on = .(id, row_id)][, row_id := NULL][]
# id x y
# 1: 1 a A
# 2: 1 b B
# 3: 1 c <NA>
# 4: 2 d D
# 5: 3 e E
# 6: 3 f <NA>
# 7: 4 g G
库(data.table)
dt1当在id
上加入时,R如何知道一个时间id=1-->y=A,另一个时间id=1-->y=B。。。x和y之间有关系吗?不是很明确,这就是问题所在。这是我之前做的一些操作的结果,从技术上讲,这两者之间的联系就是它们的分类方式。因此,如果组1由x=a,b,c组成,那么y中任何未缺失的值都必须是相同的顺序。只有某个组的最后n个值可以丢失。不能重复,因为在加入之前需要进行一些数据准备。实际的连接不是这里的问题。也许你可以更好地解释这个过程。我所看到的是,如果大写字母存在的话,你正在将x中的小写字母与y中的大写字母进行匹配。还有别的吗?或者你能给y添加一个小写版本,然后在ID和小写上左键连接吗?基于注释的更新答案所以谢谢你向我介绍data.tables,这是一个多么神奇的软件包!
library(data.table)
dt1 <- data.table(id = c(1,1,1,2,3,3,4), x = c("a", "b", "c", "d", "e", "f", "g"))
dt2 <- data.table(id = c(1,1,2,3,4), y = c("A", "B", "D", "E", "G"))
#rumber rows by group
dt1[ , row_id := seq.int(1:.N), by = .(id)]
dt2[ , row_id := seq.int(1:.N), by = .(id)]
dt1[dt2, y := i.y, on = .(id, row_id)][, row_id := NULL][]
# id x y
# 1: 1 a A
# 2: 1 b B
# 3: 1 c <NA>
# 4: 2 d D
# 5: 3 e E
# 6: 3 f <NA>
# 7: 4 g G