gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:42:53 24 4
gpt4 key购买 nike

我从 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)

所以这就是我的数据框最终的样子:
  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

我的目标是计算每个数据表中每个匹配列的行平均值。因此,在这种情况下,我希望所有以 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

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

谢谢

最佳答案

colnames = c("V1", "V2", "V3", "V4")
res <- 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
R grep函数返回一个整数向量,用于从较大的数据框中有选择地“拉出”包含单个“V”列名称的列。
如果您需要自动生成名称:
> unique(sapply(strsplit(names(DF)[-1], ".", fixed=TRUE), "[", 2) )
[1] "V1" "V2" "V3" "V4"

关于r - 根据(部分)匹配的列名计算行均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12397210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com