r - 计算 R 中多个数据帧的 z 分数
问题描述
我有十个行数和列数相等的数据框。它们看起来像这样:
df1 <- data.frame(geneID=c("AKT1","AKT2","AKT3","ALK",
"APC"),
CDKN2A=c(3490,9447,4368,908,204),
INPP4B=c(NA,9459,4395,1030,NA),
BCL2=c(NA,9480,4441,1209,NA),
IRS2=c(NA,NA,4639,1807,NA),
HRAS=c(3887,9600,4691,1936,1723))
df2 <- data.frame(geneID=c("AKT1","AKT2","AKT3","ALK",
"APC"),
CDKN2A=c(10892,17829,7156,1325,387),
INPP4B=c(NA,17840,7185,1474,NA),
BCL2=c(NA,17845,7196,1526,NA),
IRS2=c(NA,NA,12426,10244,NA),
HRAS=c(11152,17988,7545,2734,2423))
df3 <- data.frame(geneID=c("AKT1","AKT2","AKT3","ALK",
"APC"),
CDKN2A=c(11376,17103,8580,780,178),
INPP4B=c(NA,17318,9001,2829,NA),
BCL2=c(NA,17124,8621,1141,NA),
IRS2=c(NA,NA,8658,1397,NA),
HRAS=c(11454,17155,8683,1545,1345))
我想根据多个数据帧的均值和方差计算每个数据帧的 z 分数。z-score 应按如下方式计算:z-score=(x-mean(x))/sd(x)))。
我发现 plyr 的 ddply 函数可以完成这项工作,但解决方案是针对单个数据帧,而我有多个数据帧作为单独的文件,有 18214 行和 269 列。
我将不胜感激任何建议。
非常感谢您的帮助!奥尔哈
解决方案
这是一个选项,我们将数据集与bind_rows
(from dplyr
) 绑定在一起,然后按分组列分组并返回zscore
转换后的数字列
library(dplyr)
bind_rows(df1, df2, df3, .id = 'grp') %>%
group_by(geneID) %>%
mutate(across(where(is.numeric),
~(.- mean(., na.rm = TRUE))/sd(., na.rm = TRUE), .names = '{col}_zscore'))
注意:如果我们不需要新列,则删除该.names
部分
如果我们需要在循环中执行此操作,而不绑定到单个 data.frame,可以循环list
library(purrr)
list(df1, df2, df3) %>% # // automatically => mget(ls('^df\\d+$'))
map(~ .x %>%
mutate(across(where(is.numeric),
~(.- mean(., na.rm = TRUE))/sd(., na.rm = TRUE), .names = '{col}_zscore')))
推荐阅读
- java - 如何在 JNI 中处理 -classpath 属性 Java 10
- java - 无法将 ImageIcon 添加到 JFrame
- string - 什么是字符串中的 \0?
- python - 删除标准输出缓冲区中的最后一个字符
- python - 如何 pip install 进行开发?
- python - 在 Python 中从 Entry() 获取值
- python - 如何从 numpy 数组的每一行中仅获取第一个 True 值?
- angular - 为什么我收到错误 TS2339:“主题”类型上不存在属性“扫描”
'? - validation - 多文件上传验证消息问题
- javascript - FineUploader上传后获取uuid