Я решил проблему, которую вы упомянули в своем комментарии, так как это, кажется, ваша настоящая цель.Это позволяет избежать путаницы с формулами из исходного вопроса.
Воспроизводимая версия набора данных.
group_names <- apply(
expand.grid("X", c("X", "O", "Y"), c("A", "B", "C"), "_", 0:9, 0:9),
1,
paste,
collapse = ""
)
n_groups <- 50
n_points_per_group <- 10
df1 <- as.data.frame(matrix(
runif(n_points_per_group * n_groups),
ncol = n_groups
))
colnames(df1) <- sample(group_names, n_groups)
Теперь преобразуйте фрейм данных в длинный формат.(Используя пакет reshape
здесь. Вы также можете использовать stats::reshape
.)
melted_df1 <- melt(df1)
Определить группировку на основе ваших критериев соответствия второго символа и числа.
melted_df1$group <- with(melted_df1, paste(
substring(variable, 2, 2),
substring(variable, 5, 6),
sep = ""
))
Теперь позвоните tapply
(или plyr::ddply
, если хотите), чтобы получить сводную статистику.
with(melted_df1, tapply(value, group, mean))