Я ценю вашу помощь в применении функции для группировки фреймов данных по некоторым столбцам.Я полагаю, мне нужно использовать какую-то функцию dplyr
или lapply
или do.call
, но я не смог этого сделать.
У меня есть следующий фрейм данных:
dfFull <- data.frame(Cen = c("Cen01", "Cen01", "Cen01", "Cen01",
"Cen01", "Cen01", "Cen01", "Cen01",
"Cen02", "Cen02", "Cen02", "Cen02",
"Cen02", "Cen02", "Cen02", "Cen02"),
Model = c("Mod01", "Mod01", "Mod01", "Mod01",
"Mod02", "Mod02", "Mod02", "Mod02",
"Mod01", "Mod01", "Mod01", "Mod01",
"Mod02", "Mod02", "Mod02", "Mod02"),
Indiv = c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4),
PF = c(1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2),
Obj1 = c(0.0,0.02,0.01,0.03,0.01,
0.0,0.02,0.0,0.15,0.03,
0.02,0.08,0.1,0.06,0.02,0.09),
Obj2 = c(0.8,0.62,0.85,0.7,0.92,
0.26,0.85,0.93,0.03,0.84,
0.94,0.84,0.05,0.63,0.83,0.92))
Мне нужно вызвать функцию (из пакета emoa ):
dominated_hypervolume(matrix_points, refp)
, которая вычисляет hypervolume
для matrix_point
с использованием предварительно определенного refp
. refp
- это вектор (RP <- c(1.0,1.0)
), используемый для каждого расчета.
Проблема связана с matrix_points:
matrix_points
- это матрица, которая транспонирована по сравнению с моим фреймом данных. - Мне нужно это
hypervolume
, рассчитанное с использованием Obj1 и Obj2 всех индивидуумов, сгруппированных по Cen , Mod и PF столбцы.
Используя небольшие данные, я знаю, что dominated_hypervolume
выполнит эту работу, поскольку я смогу предоставить правильные данные.
Я знаю, что это неправильно, но я пыталсясделать что-то вроде:
dfFull <- dfFull %>%
group_by(Cen, Model, PF) %>%
do.call(HV =dominated_hypervolume(data.matrix(t(dfFull[,5:6]), RP)))
В конце я ожидаю следующее.HV
значение является лишь примером, а не рассчитанным.Не является проблемой повторить значение HV
для строк лиц, использованных в его расчете.
Cen Model PF Indiv Obj1 Obj2 HV
Cen01 Mod01 1 1 0.0 0.8 0.77
Cen01 Mod01 1 2 0.02 0.62 0.77
Cen01 Mod01 2 3 0.01 0.85 0.74
Cen01 Mod01 2 4 0.03 0.70 0.74
Cen01 Mod02 1 1 0.01 0.92 0.81
Cen01 Mod02 1 2 0.0 0.26 0.81
Cen01 Mod02 2 3 0.02 0.85 0.69
Cen01 Mod02 2 4 0.0 0.93 0.69
Cen02 Mod01 1 1 0.15 0.03 0.88
Cen02 Mod01 1 2 0.03 0.84 0.88
Cen02 Mod01 2 3 0.02 0.94 0.86
Cen02 Mod01 2 4 0.08 0.84 0.86
Cen02 Mod02 1 1 0.1 0.05 0.76
Cen02 Mod02 1 2 0.06 0.63 0.76
Cen02 Mod02 2 3 0.02 0.83 0.64
Cen02 Mod02 2 4 0.09 0.92 0.64
Спасибо за вашу помощь.