使用多个键对从长到宽进行重塑并基于多个列值进行聚合

时间:2018-12-13 21:25:46

标签: r reshape tidyr melt dcast

我有一个看起来像这样的数据框:

 df <- data.frame(value =c(2,3,1,3,5,2),
         renew =c(2,2,3,2,4,1),
         renewFreq = c(.02,.12,.13,.12,.40,.04),
         recommend = c(1,3,5,4,2,2),
         recommendFreq = c(.01,.30,.46,.20,.07,.07),
         year = c(1,2,3,2,1,1),
         valueFreq = c(.02,.03,.01,.03,.05,.02),
         meanVal = c(1.1,2.2,3.1,2.2,1.1,1.1))

    value renew renewFreq recommend recommendFreq year valueFreq meanVal
1     2     2      0.02         1          0.01    1      0.02     1.1
2     3     2      0.12         3          0.30    2      0.03     2.2
3     1     3      0.13         5          0.46    3      0.01     3.1
4     3     2      0.12         4          0.20    2      0.03     2.2
5     5     4      0.40         2          0.07    1      0.05     1.1
6     2     1      0.04         2          0.07    1      0.02     1.1

在此数据框中,值,更新和推荐的范围为1-5。 “频率”列按年份给出标度值的频率。 meanVal是每年的平均值。因此,存在按年份精简的重复值。我还需要更新的总和,并建议频率,以便如果小数位值是1或2,则将它们相加,3将获得一个新列,而4和5将被相加。

重塑应如下所示:

   year value.1 value.2 value.3 value.4 value.5 meanVal prctRenew1or2 prctRenew3 prctRenew4or5 prctRecomm1or2 prctRecomm3 prctRecomm4or5

 1    1    0.00    0.04    0.00       0    0.05     1.1          0.06       0.00           0.4           0.15         0.0           0.00
 2    2    0.00    0.00    0.06       0    0.00     2.2          0.24       0.00           0.0           0.00         0.3           0.20
 3    3    0.01    0.00    0.00       0    0.00     3.1          0.00       0.13           0.0           0.00         0.0           0.46

值得分(1-5)应该是标头value.1-value.5,得分是该年的valueFreq。 meanVal是按年份折叠的meanVal。最后,有6个prct列。例如,prctRenew1or2将是renewFreq的频率之和,其中renew下的分数是1或2(其他prct var依此类推)。

请注意,某些列的值一直为0,但是重要的是仍要包括它们。

0 个答案:

没有答案