Среднее в кадре данных R

У меня есть датафрейм, который выглядит так:

  name  val type group
1 A3330 184 ave IX13
2 A3330 42  min IX13
3 A1473 195 ave IX01
4 A1473 93  min IX01
5 A3330 80  ave BG12
6 A3330 44  min BG12
7 A1473 15  ave IX3
8 A1473 91  min IX3

Я хочу усреднить каждое значение в val, по группам, если тип одинаков. Таким образом, 1 и 5 усредняются, несмотря на то, что это разные группы. То же самое касается 2 и 6, 3 и 7, а также 4 и 8. В конце я надеюсь получить новый фрейм данных, который будет выглядеть так:

name   val type
A3330  132 ave
A333   43  min
A1473  105 ave
A1473  92  min

Я думаю, что я должен сделать что-то вроде этого:

for (metric in type)
 for(names in name)
  mean(df[df$name==names && type==metric, df$type])
 }
}

Но в моем ограниченном опыте R всегда есть лучший способ, чем зацикливаться. Какие-либо предложения?

1 ответ

Решение

Сам не проверял, но с помощью пакета data.table, что-то вроде этого должно работать для вас -

library(data.table)
df <- data.table(df)
df2 <- df[,
   list(
      meanval = mean(val)
   ),
   by = c('name','type')
]
Другие вопросы по тегам