在 R 中连接数据帧(1:n 关系)

Joining dataframes in R (1:n relation)

我有一个data.framedf1

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

我还有第二个data.framedf2

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 df2 中的条目数,其中 df2$key==5df2$var==TRUE.

感谢您的帮助!

以下是在 base 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。