如何从列中减去数字并将结果另存为R中的向量

时间:2018-11-26 18:30:17

标签: r

我正在R中尝试做一些事情。我有一个很大的数据集。我需要找到已完成的列SI.x的均值,然后分解数据并为我也已完成的每个子集找到SI.x的均值。

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

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

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

    meangen0a <- mean(gen0a$SI.x)
    

这很好。

  1. 我按处理方式(对照和其他四个处理方式)划分了世代,只使用了为其选择的(由1列中的Select指定)。 / p>

    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

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

[[1]]

[1] 0.0006274983

[[2]]

[1] -0.0102071

[[3]]

[1] -0.008789275

[[4]]

[1] 0.009710126

[[5]]

[1] 0.008658747

1 个答案:

答案 0 :(得分:0)

我们可以在tidyverse

中完成此操作
library(tidyverse)
gen0a %>%
     mutate(Meanval = mean(SI.x)) %>%
     filter(Select == 1) %>%
     group_by(Generation, SelectTreatment) %>%
     mutate(NewMean = mean(SI.x) - Meanval)