首页 > 解决方案 > 如何从列中减去一个数字并将结果保存为 R 中的向量

问题描述

我想在 R 中做几件事。我有一个很大的数据集。我需要找到SI.x我已经完成的列的平均值,然后分解数据并找到SI.x每个子集的平均值,我也已经完成了。

但是然后我需要从每个子集均值中减去总均值SI.x(我称之为meangen0a我正在查看的一代的均值)。我想要一种将子集均值保存为向量的方法,meangen0a从每个向量中减去,然后将结果保存为另一个向量,因为稍后我需要做更多的向量数学运算。

这是我到目前为止所做的:

  1. 我得到了SI.x我正在看的一代的平均值(我称之为gen0a):

    meangen0a <- mean(gen0a$SI.x)
    

这工作得很好。

  1. 我按处理(一个对照和其他四个)划分了一代,并且只使用了那些被选中的(1Select列中由 a 指定)。

    gen0ameans <- with(gen0a[gen0a$Select == 1,], aggregate(SI.x, by=list(Generation, SelectTreatment), mean))
    colnames(gen0amean) <- c("Generation, "Treatment", "S")
    

这给了我一张表格,上面有一代(全部0a)、五种治疗方法以及它们各自SI.x的方法。这就是我想要的。

  1. 现在我想meangen0a从表中的五个处理均值中减去总均值gen0ameans。我试过这样做:

    S0a <- lapply(gen0ameans$S, FUN=function(S) S-meangen0a)
    

它给了我正确的数字,但不是矢量格式。我需要它在某种向量中,因为我稍后需要对下一代进行子集化,并从下一代中减去0a' 的平均值。当我试图保存S0a为向量或矩阵时,它并没有像我想要的那样给我一行或一列的手段。

任何帮助,将不胜感激。谢谢!

编辑 - 的平均值gen0a是 -0.07267818。

gen0ameans表如下所示:

Generation
-----------------
0a

0a

0a

0a

0a

Treatment
-----------------
Control

Down1

Down2

Up1

Up2

S
-----------------
-0.07205068

-0.08288528

-0.08146745

-0.06296805

-0.06401943

S0a从上面的 #3执行命令时,它给了我:

[[1]]

[1] 0.0006274983

[[2]]

[1] -0.0102071

[[3]]

[1] -0.008789275

[[4]]

[1] 0.009710126

[[5]]

[1] 0.008658747

标签: r

解决方案


我们可以在tidyverse

library(tidyverse)
gen0a %>%
     mutate(Meanval = mean(SI.x)) %>%
     filter(Select == 1) %>%
     group_by(Generation, SelectTreatment) %>%
     mutate(NewMean = mean(SI.x) - Meanval)

推荐阅读