我正在R中尝试做一些事情。我有一个很大的数据集。我需要找到已完成的列SI.x
的均值,然后分解数据并为我也已完成的每个子集找到SI.x
的均值。
但是,我需要从每个子集均值中减去总均值SI.x
(我将其称为meangen0a
,因为它是我正在查看的这一代的均值)。我想要一种将子集的均值保存为向量的方法,从这些均值中减去meangen0a
,然后将结果另存为另一个向量,因为稍后需要做更多的向量数学运算。
这是我到目前为止所做的:
我得到了正在查看的世代的平均值SI.x
(我称之为gen0a
):
meangen0a <- mean(gen0a$SI.x)
这很好。
我按处理方式(对照和其他四个处理方式)划分了世代,只使用了为其选择的(由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
的含义。这就是我想要的。
现在,我想从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
答案 0 :(得分:0)
我们可以在tidyverse
library(tidyverse)
gen0a %>%
mutate(Meanval = mean(SI.x)) %>%
filter(Select == 1) %>%
group_by(Generation, SelectTreatment) %>%
mutate(NewMean = mean(SI.x) - Meanval)