根据(部分)匹配列名计算行均值

Vin*_*woo 3 r

我从3个大型数据表(名为A1,A2,A3)开始.每个表有4个数据列(V1-V4),1个"日期"列,在所有三个表中都是常量,以及数千行.

这是一些近似我的表的虚拟数据.

A1.V1<-c(1,2,3,4)
A1.V2<-c(2,4,6,8)
A1.V3<-c(1,3,5,7)
A1.V4<-c(1,2,3,4)


A2.V1<-c(1,2,3,4)
A2.V2<-c(2,4,6,8)
A2.V3<-c(1,3,5,7)
A2.V4<-c(1,2,3,4)


A3.V1<-c(1,2,3,4)
A3.V2<-c(2,4,6,8)
A3.V3<-c(1,3,5,7)
A3.V4<-c(1,2,3,4)

Date<-c(2001,2002,2003,2004)

DF<-data.frame(Date, A1.V1,A1.V2,A1.V3,A1.V4,A2.V1,A2.V2,A2.V3,A2.V4,A3.V1,A3.V2,A3.V3,A3.V4)
Run Code Online (Sandbox Code Playgroud)

所以这就是我的数据框最终看起来像:

  Date A1.V1 A1.V2 A1.V3 A1.V4 A2.V1 A2.V2 A2.V3 A2.V4 A3.V1 A3.V2 A3.V3 A3.V4
1 2001     1     2     1     1     1     2     1     1     1     2     1     1
2 2002     2     4     3     2     2     4     3     2     2     4     3     2
3 2003     3     6     5     3     3     6     5     3     3     6     5     3
4 2004     4     8     7     4     4     8     7     4     4     8     7     4
Run Code Online (Sandbox Code Playgroud)

我的目标是计算每个数据表中每个匹配列的行平均值.所以在这个实例中,我希望所有列的行均值以V1结尾,所有列以V2结尾,所有列以V3结尾,所有列以V4结尾.

最终结果看起来像这样

      V1  V2  V3  V4
2001   1   2   1   1
2002   2   4   3   2
2003   3   6   5   3
2004   4   8   7   4
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何根据列名中的部分匹配来计算行均值?

谢谢

42-*_*42- 7

colnames = c("V1", "V2", "V3", "V4")
sapply(colnames, function(x) rowMeans(DF [, grep(x, names(DF))] )  )
rownames(res) <- DF$Date
res
     V1 V2 V3 V4
2001  1  2  1  1
2002  2  4  3  2
2003  3  6  5  3
2004  4  8  7  4
Run Code Online (Sandbox Code Playgroud)

如果您需要自动生成名称:

> unique(sapply(strsplit(names(DF)[-1], ".", fixed=TRUE), "[", 2) )
[1] "V1" "V2" "V3" "V4"
Run Code Online (Sandbox Code Playgroud)