在两个数据集的ID匹配(Matching IDs in two datasets)

2019-08-31 12:05发布

我有两组数据,包括前和后的数据。 受访者具有唯一的ID,我想创建一个子集,其中包括只有那些谁应对这两项调查。 示例数据集:

pre.data <- data.frame(ID = c(1:10), Y = sample(c("yes", "no"), 10, replace = TRUE),
  Survey = 1)

post.data <- data.frame(ID = c(1:3,6:10), Y = sample(c("yes", "no"), 8, replace = TRUE),
  Survey = 2)

all.data <- rbind(pre.data, post.data)

我有以下功能:

match <- function(dat1, dat2, dat3){  #dat1 is whole dataset(both stitched together) 
  #dat2 is pre dataset #dat3 is post dataset
  selectedRows <- (dat1$ID %in% dat2$ID & 
                     dat1$ID %in% dat3$ID)

  matchdata <- dat1[selectedRows,]
  return(matchdata)
}

prepost.match.data <- match(all.data, pre.data, post.data)

我想一定不是做同样的事情,这个功能更好的办法,但我怎么也想不到。 我如何做它似乎有点凌乱。 我的意思是,它的工作原理 - 它做什么,我也想,但我忍不住想有一个更好的办法。

我的道歉,如果这已经被要求以同样的方式,但我无法找到它 - 在这种情况下,请你指出我对相关的答案。

Answer 1:

注:阿伦张贴在评论相同的答案比我早一点。

您可以使用intersect这样的:

all.data[all.data$ID %in% intersect(pre.data$ID, post.data$ID),]

这使 :

   ID   Y Survey
1   1 yes      1
2   2  no      1
3   3  no      1
6   6 yes      1
7   7 yes      1
8   8 yes      1
9   9  no      1
10 10 yes      1
11  1  no      2
12  2 yes      2
13  3  no      2
14  6  no      2
15  7 yes      2
16  8 yes      2
17  9  no      2
18 10 yes      2


Answer 2:

看看plyr加入。

prepost.match.data <- join(pre.data, post.data, by = c("ID"))


文章来源: Matching IDs in two datasets