在R中加入数据帧(1:n关系)

时间:2018-03-16 14:46:03

标签: r dataframe join tidyverse

我有一个data.frame df1

df1 <- data.frame(id=1:10)

我有第二个data.frame df2

df2 <- data.frame(id=1:100, key=sample(1:10,100,replace=T), var1=sample(c(TRUE, FALSE),100, replace=T), var2=sample(c("X", "Y"),100, replace=T))

变量df2$key是辅助密钥,指向变量df1$id

现在,对于df1中的每个条目,我想检查df2中有多少条目,具体情况如下。

一个例子: 如果df1$id==5我想创建一个变量df1$count来计算data {frame df2df2$key==5df2$var==TRUE的条目数。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

以下是你在基地R中的表现:

merge(df1, aggregate(var1 ~ key, df2, FUN = sum), 
      by.x = "id", by.y = "key", all.x = TRUE)
   id var1
1   1    3
2   2    1
3   3    4
4   4    6
5   5    9
6   6    4
7   7    5
8   8    7
9   9    4
10 10    3

或使用dplyr:

library(dplyr)

df2 %>% 
  filter(var1) %>% 
  count(key) %>% 
  right_join(df1, by = c("key" = "id"))

在这两种情况下,我们首先进行计数,然后将结果合并到df1。