R中的特定总和

Specific Sum in R

我在 R 中有两个这样的数据框,第一个

 X     Y      Z
 A     B     0.01
 C     D     0.45
 E     F     0.65

第二个

ID  Product  Price
 1     A      10
 1     B      15
 1     F      20 
 2     C      20
 2     D      25
 3     A      10
 3     B      15
 3     C      20
 3     D      25
 4     A      15
 4     C      20
 4     D      25
 4     E      30
 4     F      35

对于 df1 中的每个 XY 对产品,我如何找到第二个 data.frame 中同时包含产品和总价的 ID 数量?

示例输出:

 X     Y      Z     Count(Rule)  Sum(Price)
 A     B     0.01       2            50
 C     D     0.45       3            135
 E     F     0.65       1            65

这是一种获取所需内容的方法,可能不是最优雅的方法,但它提供了所需的输出:

如果你的 df 被称为 df1df2:

df1[, c("Count(Rule)", "Sum(Price)")] <- 

   t(apply(df1[, 1:2], 1, 
           function(couple, df){
               # find the IDs that have both products
               Id_ok <- intersect(df$ID[df$Product %in% couple[1]], df$ID[df$Product %in% couple[2]])
               # get the data.frame subset with only the desired IDs and Products
               sub_df <- df[df$ID %in% Id_ok & df$Product %in% couple, ]
               # return the values you need
               c(count=length(Id_ok), sum_price=sum(sub_df$Price))
            }, df=df2))

 df1
#  X Y    Z Count(Rule) Sum(Price)
#1 A B 0.01           2         50
#2 C D 0.45           3        135
#3 E F 0.65           1         65