首页 > 解决方案 > 在组内总结 dplyr

问题描述

我有一个如下数据集:

BRAND  MEDIUM      W1   W2   W3   W4   W5

   B1   tv          1    0    1    0    2
   B2   tv          0    0    0    0    0
   B1   radio       0    1    2    5    3
   B1   tv          0    0    0    0    0
   B2   radio       0    4    1    1    1
   B1   newspapers  7    4    2    1    0

我想要做的是按品牌分组并对每一列的值求和,以形成一个由总和值组成的唯一行。此外,我还想显示每个子组中的 MEDIUM。

最终输出应如下所示:

          W1    W2   W3   W4   W5  tv radio newspaper 

   B1      8    9    5    6    5   1   1       1
   B2      0    4    1    1    1   1   1       0

我很难找到解决这个问题的方法,尤其是第二部分将哪种媒介放在组中。有什么建议或提示吗?谢谢

标签: rgroup-bydplyrdataset

解决方案


Mybe 晚了,但你也可以尝试在没有任何外部包的情况下对其进行管理,分两步:

首先聚合W...by BRAND

# aggregate by brand, and not using the MEDIUM column:
one  <-   aggregate(. ~ BRAND, data = dats[,-2], sum) 

然后是介质:

# frequencies
# EDIT HERE
# two <- as.data.frame.matrix(table(dats$BRAND,dats$MEDIUM))  
# replace with ones
# two[(two)>1] <- 1

# thanks to Ronak Shah
two <- data.frame(BRAND = unique(dats$BRAND), +(table(dats$BRAND, dats$MEDIUM) > 0))

最后,您可以合并两个数据集:

merge(one, two)
  BRAND W1 W2 W3 W4 W5 newspapers radio tv
1    B1  8  5  5  6  5          1     1  1
2    B2  0  4  1  1  1          0     1  1

推荐阅读