У меня есть набор данных, похожий на тот, который я создаю со следующим кодом:
cluster <- rep(c(1,1,1,2,2,1,3,3,2,3,3))
measure_t1 <- rep(c(4.3, 4.7, 4.5, 3.4, 3.3, 4.7, 2.2, 2.1, 3.6, 2.2, 2.2))
measure_t2 <- rep(c(4.0, 4.1, 4.2, 3.5, 3.5, 4.6, 2.1, 2.4, 3.7, 2.3, 2.2))
measure_t3 <- rep(c(4.3, 4.2, 4.9, 3.8, 3.5, 4.3, 2.2, 2.8, 3.8, 2.7, 2.4))
df <- data.frame(cluster=cluster, measure_t1=measure_t1, measure_t2=measure_t2,
measure_t3=measure_t3)
Итак, у меня есть измерения одной и той же переменной, взятые в трех разных выборках, в трех разных местах (кластер ""), с копиями в этом месте.
Я в основном хочу добавить три набора столбцов в набор данных, где каждый новый столбец содержит среднее значение каждого кластера для данного случая выборки.Другими словами, новый столбец «mean_t1» должен содержать среднее значение measure_t_1 для кластера 1 каждый раз для кластера == 1, среднее значение measure_t1 для кластера 2 каждый раз для кластера == 2 и среднее значение measure_t1 для кластера 3 каждый разкластер == 3.Я хочу сделать то же самое для measure_t2 и measure_t3.
У меня нет проблем с этим с помощью следующего кода:
mean_t1 <- sapply(df$cluster, function(x) if(x==1) mean(df$measure_t1[df$cluster==1])
else if(x==2) mean(df$measure_t2[df$cluster==2])
else if(x==3) mean(df$measure_t2[df$cluster==3]))
и, конечно, я могу использовать один и тот же код для созданияmean_t2 и mean_t3, но в моем реальном наборе данных много столбцов, и это отнимает много времени.
Поэтому я хотел бы сделать это итеративно, либо в цикле, либо путем создания функции, которая будет применяться к различным столбцам, но я не справился.