首页 > 解决方案 > 如何修改 Sapply 以在其他列中找到平均值

问题描述

如果V1 = 0,我试图找出Yi0数据的平均值,如果V1 = 1,则为每个Vx(V1 ... V2等)列找出Yi1数据的平均值,但我的代码似乎有缺陷,有人吗有关于如何解决这个问题的建议吗?

这是我的示例数据和代码

set.seed(1)
    df <- data.frame(Yi0 =  runif(n=10, min = 0, max = 10),
                 Yi1 = runif(n=10, min = 0, max = 10),
                 V1 = c(1,1,1,1,1,0,0,0,0,0),
                 V2 = c(0,1,0,1,0,1,0,1,0,1))

在此处输入图像描述

pm <- function(x) {
  as.numeric(
    ifelse(
      test = df[,x] == 0,
      yes =mean(df["Yi0"]),
      no = ifelse(
        test = df[,x] == 1,
        yes = mean(df["Yi1"]),
        no = "error")))
} 

ab <- sapply(X = 3:4, FUN=pm)
ab

最终,我要取 mean(2.059 + 1.765 + ... + 7.69) - mean(8.9838+9.446+...+0.6178),对于以 V 开头的每一列,我总共有 200 万他们...

谢谢你

这是原始数据集 在此处输入图像描述

标签: rdataframeloopsmeansapply

解决方案


如果我对您的理解正确,对于V1您想要做的一列 ( )

mean(df$Yi0[df$V1 == 0]) - mean(df$Yi1[df$V1 == 1])
#[1] 1.9

对于使用多个列,sapply您可以执行 -

sapply(df[3:4], function(x) mean(df$Yi0[x == 0]) - mean(df$Yi1[x == 1]))

#   V1    V2 
# 1.94 -0.43 

推荐阅读