Я хочу изменить форму данных из длинного в широкий формат, и я потеряю некоторые данные, которые я хотел бы сохранить. В следующем примере:
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
(например, как единая объединенная строка), - количество наблюдений, используемых для агрегации.
то есть. Я хотел бы, чтобы полученный data.frame был следующим:
# 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))
- но это вызывает ошибку.