Вот альтернативный подход с использованием tidyverse
X<-c(1,2,3,4,5,6,7,8,9)
Y<-c(2,4,6,8,10,12,14,16,18)
Z<-c(1,3,5,7,10,13,16,19,22)
Name<-c("AA.11", "AA.12", "AA.13", "AB.11", "AB.12", "AB.13", "AC.11", "AC.12", "AC.13")
DF<-data.frame(Name,X,Y,Z)
library(tidyverse)
df_res = tibble(rownames = c("AA", "AB", "AC", ".11", ".12", ".13")) %>% # save rownames of interest as a tibble
mutate(d = map(rownames, ~DF[grep(.x, DF$Name),]), # get the corresponding subsets
c_means = map(d, ~colMeans(.x[-1]))) %>% # get the corresponding column means
print() # print result
# # A tibble: 6 x 3
# rownames d c_means
# <chr> <list> <list>
# 1 AA <data.frame [3 x 4]> <dbl [3]>
# 2 AB <data.frame [3 x 4]> <dbl [3]>
# 3 AC <data.frame [3 x 4]> <dbl [3]>
# 4 .11 <data.frame [3 x 4]> <dbl [3]>
# 5 .12 <data.frame [3 x 4]> <dbl [3]>
# 6 .13 <data.frame [3 x 4]> <dbl [3]>
Пока у вас есть вывод, в котором хранятся подмножества (d
), процесс, используемый для получения значений столбца и самих столбцов (c_means
), для каждого предоставленного вами rowname
.
Вы можете получить доступ к тем хранимым переменным, как это:
# see the subset used for AC
df_res$d[df_res$rownames == "AC"]
# [[1]]
# Name X Y Z
# 7 AC.11 7 14 16
# 8 AC.12 8 16 19
# 9 AC.13 9 18 22
# see the column means for AC
df_res$c_means[df_res$rownames == "AC"]
# [[1]]
# X Y Z
# 8 16 19
# see all column means
df_res$c_means
# [[1]]
# X Y Z
# 2 4 3
#
# [[2]]
# X Y Z
# 5 10 10
#
# [[3]]
# X Y Z
# 8 16 19
#
# [[4]]
# X Y Z
# 4 8 8
#
# [[5]]
# X Y Z
# 5.00000 10.00000 10.66667
#
# [[6]]
# X Y Z
# 6.00000 12.00000 13.33333