Remodelación complicada
Quiero remodelar mi marco de datos de formato largo a ancho y pierdo algunos datos que me gustaría conservar. Para el siguiente ejemplo:
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
Esto es casi lo que necesito, pero me gustaría tenerlo.
algún campo guardando datos deParD
campo (por ejemplo, como una sola cadena fusionada),Número de observaciones utilizadas para la agregación.es decir, me gustaría que el data.frame resultante fuera el siguiente:
# 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
Estaría agradecido por cualquier idea. Por ejemplo, traté de resolver la segunda tarea escribiendo en dcast:fun.aggregate=function(x) c(Val=mean(x),Num=length(x))
- Pero esto provoca un error.