如何根据 R 中的另一个变量按 ID 合并两个数据集

How to merge two data sets by IDs based on another variable in R

我想合并两个ID不同的数据集。 Data2 是较大数据集 (data1) 的子集,它是通过删除 data1 中标记为 1 的 ID 创建的。在示例数据中,两个数据集在 ID 426 之前具有相同的 ID。对于 ID 427,当第一个数据中的标签为 1 时,第二个数据删除该条目并继续使用顺序 ID。因此,第二个数据中的 Id 427 是第一个数据中的 428。同样,第二个数据中的 ID 1865 是第一个数据中的 1867。我如何合并这些数据集?我在线提供了一个样本数据。第一个数据有变量 id、date 和 tag,而第二个数据有 id1 和 date1

> dput(data1)
structure(list(id = c(426L, 427L, 428L, 429L, 430L, 431L, 432L, 
1865L, 1866L, 1867L, 1868L, 1869L, 1870L, 1871L, 2388L, 2389L, 
2390L, 2391L, 2965L, 2966L, 2967L, 2968L, 2969L, 2970L), date = structure(c(11250, 
7308, 12436, 9919, 13372, 9526, 8232, 7306, 9872, 7398, 10332, 
12967, 14288, 14053, 7311, 10268, 7772, 14477, 7309, 10228, 8917, 
10216, 10873, 8065), class = "Date"), tag = c(0L, 1L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L)), datalabel = "", time.stamp = "24 Jan 2015 22:01", .Names = c("id", 
"date", "tag"), formats = c("%8.0g", "%tdDD_mon_CCYY", "%8.0g"
), types = c(252L, 254L, 251L), val.labels = c("", "", ""), var.labels = c("", 
"", ""), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", 
"9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", 
"20", "21", "22", "23", "24"), version = 12L, class = "data.frame")
> 



> dput(data2)
structure(list(id1 = c(426L, 427L, 428L, 429L, 430L, 431L, 432L, 
1865L, 1866L, 1867L, 1868L, 1869L, 1870L, 1871L, 2388L, 2389L, 
2390L, 2391L, 2965L, 2966L, 2967L, 2968L, 2969L, 2970L), date1 = structure(c(11250, 
12436, 9919, 13372, 9526, 8232, 13787, 7398, 10332, 12967, 14288, 
14053, 11620, 11426, 14477, 11464, 9029, 11875, 10873, 8065, 
11233, 13848, 10204, 9535), class = "Date")), datalabel = "", time.stamp = "24 Jan 2015 22:00", .Names = c("id1", 
"date1"), formats = c("%8.0g", "%tdDD_mon_CCYY"), types = c(252L, 
254L), val.labels = c("", ""), var.labels = c("", ""), row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"
), version = 12L, class = "data.frame")

这是您要找的吗?

data <- sqldf("select a.*, b.* from data1 a left join data2 b on a.date = b.date1")

或者可能:

data <- sqldf("select a.id, a.date from data1 a join data2 b on a.date = b.date1")

据我从您对其他帖子的评论中了解到,您想要 select data1 中标记为 0 的那些行。这可以使用

来实现
data2 <- data1[data1$tag == 0,]