r - 在 R 中计算多个数据帧的 z 分数

标签 r dataframe statistics

我有十个行数和列数相同的数据框。它们看起来像这样:

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 分数应计算如下:z 分数=(x-mean(x))/sd(x)))。

我发现 plyr 的 ddply 函数可以完成这项工作,但解决方案是针对单个数据帧,而我有多个数据帧作为单独的文件,有 18214 行和 269 列。

如果有任何建议,我将不胜感激。

非常感谢您的帮助! 奥尔哈

最佳答案

这里有一个选项,我们使用 bind_rows(来自 dplyr)将数据集绑定(bind)在一起,然后按分组列进行分组并返回 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 部分


如果我们需要在循环中执行此操作,而不绑定(bind)到单个 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')))

关于r - 在 R 中计算多个数据帧的 z 分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63274404/

相关文章:

r - 一系列数据开始时的滚动方式和应用方式

php - 在高流量网络应用程序中记录页面 View 的最佳解决方案

python - 如何在 constrOptim() 中设置多个起始值

r - 评估线性混合模型中的似然函数 (lme4)

r - 用于查询大数据的 64 位 R 的 32 位数据库驱动程序

r - HTTP状态为 '404 Not Found'时如何安装软件包

r - 如何使用 Prcomp 在 R 中提取 PCA 的摘要作为数据框?

python - Pandas reshape 数据框

r - 根据另一列的值仅聚合行

r - melt.data.table 和 na.rm 作为 measure.vars 列表的第一个元素