首页 > 解决方案 > 如何使用 gsub 和 grep 计算 R 中的加权平均值?

问题描述

我想计算不同名称的不同列的加权平均值。比如weight4乘以3,weight8乘以2,weight12乘以1,然后我们把所有的数相加除以6。这是一个例子,我的真实数据有53个变量,每一个都是measure在变量末尾的数字表示的不同时间范围内。这是我的数据集

weight4 <- c(4,2,3,4,5,6)
height4 <- c(4,2,3,3,5,8)
size4 <- c(2,3,5,6,2,3)
weight8 <- c(4,2,3,4,5,6)
height8 <- c(4,2,3,3,5,8)
size8 <- c(2,3,5,6,2,3)
weight12 <- c(4,2,3,4,5,6)
height12 <- c(4,2,3,3,5,8)
size12 <- c(2,3,5,6,2,3)
df <- data.frame(weight4, height4, size4, weight8, height8, size8,
                 weight12, height12, size12)

我想计算这些列的加权平均值:这就是我到目前为止

Z <- unique(gsub("\\..", "", grep("^\\[0-9]+$", names(df), value = TRUE)))
Z
new <- lapply(setNames(nm = Z), function(z) {
  Zs <- grep(paste0("^", z, "\\"), names(df))
  Zs_seq <- rev(seq_along(Zs))
  as.matrix(df[Zs]) %*% matrix(Zs_seq, ncol = 1) / sum(Zs_seq)
})

但它不适用于我的数据。关于如何为我的数据更改此功能的任何想法?

这行代码适用于每个变量:

weight <- grep("weight", names(df))
Xs_seq <- rev(seq_along(weight))
weight <- as.matrix(df[weight]) %*% matrix(Xs_seq, ncol = 1) / sum(Xs_seq)
df$weight <- weight

我想知道是否有一种方法可以让 R 在数据中查找模式,而无需手动使用数据框中的每个变量

标签: rregex

解决方案


推荐阅读