r - 如何从列中减去一个数字并将结果保存为 R 中的向量
问题描述
我想在 R 中做几件事。我有一个很大的数据集。我需要找到SI.x
我已经完成的列的平均值,然后分解数据并找到SI.x
每个子集的平均值,我也已经完成了。
但是然后我需要从每个子集均值中减去总均值SI.x
(我称之为meangen0a
我正在查看的一代的均值)。我想要一种将子集均值保存为向量的方法,meangen0a
从每个向量中减去,然后将结果保存为另一个向量,因为稍后我需要做更多的向量数学运算。
这是我到目前为止所做的:
我得到了
SI.x
我正在看的一代的平均值(我称之为gen0a
):meangen0a <- mean(gen0a$SI.x)
这工作得很好。
我按处理(一个对照和其他四个)划分了一代,并且只使用了那些被选中的(
1
在Select
列中由 a 指定)。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
S0a
从上面的 #3执行命令时,它给了我:
[[1]]
[1] 0.0006274983
[[2]]
[1] -0.0102071
[[3]]
[1] -0.008789275
[[4]]
[1] 0.009710126
[[5]]
[1] 0.008658747
解决方案
我们可以在tidyverse
library(tidyverse)
gen0a %>%
mutate(Meanval = mean(SI.x)) %>%
filter(Select == 1) %>%
group_by(Generation, SelectTreatment) %>%
mutate(NewMean = mean(SI.x) - Meanval)
推荐阅读
- python - 从 Python 中存储为字典的 AST 树中提取 IF 案例
- amazon-web-services - 作为 SSO 解决方案的 Okta 与 AWS SSO 比较
- azure - 如何收获 Azure Web App For Containers webhook
- php - 在 Laravel 中使用 MDBootstrap?
- minecraft-forge - 你可以将多个 Forge 模组打包到一个 jar 中吗?
- mysql - 在函数内部填充数组
- sqlite - SQL 查询:选择 sum(quantity) 和 count(number) SQLite
- vba - 专家 - 表单打开方式不同于设计视图与 MS Access 对象列表
- bash - 为什么在 bash (3.2) 中拆分由换行符终止的字符串时需要 read -rd ''?
- ios - 为什么我的标签在用户退出并返回应用程序后没有显示任何文本?