我从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)
所以我的问题是,如何根据列名中的部分匹配来计算行均值?
谢谢
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)