首页 > 解决方案 > 如何根据 Python、R 中不同数据框/患者之间的第一列元素/基因取第二列值/计数的平均值?

问题描述

输入数据框:

df1:

样本数量为 1 的基因

df2:

样本数为 2 的基因

输出应该是一个数据框,其中包含 df1 和 df2 中所有可能的基因的平均值。如果 df1 有一个不在 df2 中的元素,则将该元素在 df2 中计数为零。结果数据框应该是这样的。结果数据框:

两名患者的所有基因平均

3在此处输入图像描述

标签: pythonrpandasmerge

解决方案


一种选择R是在扩展两个数据集后将两个数据集绑定在一起complete,按“基因”分组,summarisemean计数”列

library(dplyr)
library(tidyr)
out <- bind_rows(df1, df2, .id = 'grp') %>% 
         complete(grp, Genes, fill = list(Count = 0)) %>%
         group_by(Genes) %>% 
         summarise(Average = mean(Count))
# A tibble: 5 x 2
#  Genes Average
#  <chr>   <dbl>
#1 A           9
#2 B           7
#3 C          11
#4 D          13
#5 E           5

数据

df1 <- structure(list(Genes = c("A", "B", "C", "D"), Count = c(10, 14, 
4, 20)), class = "data.frame", row.names = c(NA, -4L))

df2 <- structure(list(Genes = c("A", "C", "D", "E"), Count = c(8, 18, 
6, 10)), class = "data.frame", row.names = c(NA, -4L))

推荐阅读