Сложное изменение формы

Я хочу изменить свой фрейм данных с длинного на широкий формат, и я теряю некоторые данные, которые я хотел бы сохранить. Для следующего примера:

df <- data.frame(Par1 = unlist(strsplit("AABBCCC","")),
                 Par2 = unlist(strsplit("DDEEFFF","")),
                 ParD = unlist(strsplit("foo,bar,baz,qux,bla,xyz,meh",",")),
                 Type = unlist(strsplit("pre,post,pre,post,pre,post,post",",")),
                 Val = c(10,20,30,40,50,60,70))

   #     Par1 Par2 ParD Type Val
   #   1    A    D  foo  pre  10
   #   2    A    D  bar post  20
   #   3    B    E  baz  pre  30
   #   4    B    E  qux post  40
   #   5    C    F  bla  pre  50
   #   6    C    F  xyz post  60
   #   7    C    F  meh post  70

dfw <- dcast(df,
             formula = Par1 + Par2 ~ Type,
             value.var = "Val",
             fun.aggregate = mean)

 #     Par1 Par2 post pre
 #   1    A    D   20  10
 #   2    B    E   40  30
 #   3    C    F   65  50

это почти то что мне нужно но хотелось бы иметь

некоторые поля, хранящие данные изParD поле (например, как одна объединенная строка),количество наблюдений, использованных для агрегирования.

то есть я хотел бы, чтобы результирующий кадр данных был следующим:

    #     Par1 Par2 post pre Num.pre Num.post ParD
    #   1    A    D   20  10      1      1    foo_bar 
    #   2    B    E   40  30      1      1    baz_qux
    #   3    C    F   65  50      1      2    bla_xyz_meh

Буду благодарен за любые идеи. Например, я попытался решить вторую задачу, написав в dcast:fun.aggregate=function(x) c(Val=mean(x),Num=length(x)) - но это вызывает ошибку.

Ответы на вопрос(8)

Ваш ответ на вопрос