R中的特定总和

时间:2016-07-18 13:37:23

标签: r sum data-modeling data-manipulation

我在R中有两个看起来像这样的数据框,First One

 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

1 个答案:

答案 0 :(得分:1)

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

如果你的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