Соединение фреймов данных в R (отношение 1:n)

У меня есть 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 df2, где df2$key==5 и df2$var==TRUE.

Спасибо за помощь!


person D. Studer    schedule 16.03.2018    source источник


Ответы (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.

person talat    schedule 16.03.2018