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

Posted

技术标签:

【中文标题】如何根据 Python、R 中不同数据框/患者之间的第一列元素/基因取第二列值/计数的平均值?【英文标题】:How to take average of 2nd column values/counts based on first column elements/genes between different dataframes/patients in Python, R? 【发布时间】:2020-04-06 02:21:31 【问题描述】:

输入数据帧:

df1:

df2:

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

3:

【问题讨论】:

【参考方案1】:

R 中的一个选项是在使用complete 扩展两个数据集后将两个数据集绑定在一起,按“基因”分组,summarise“计数”列的mean

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))

【讨论】:

非常感谢您的帮助。但是 B 值应该是 7 而 E 值应该是 5 而不是 14 和 10。 @JaleesUrRahman for Gene A,您的平均值显示为 14,但两个数据集中的值都是 8 和 10。虽然不清楚。 'D' 中也有同样的问题(20、6 -> 平均 13) 是的,我犯了这个错误。你的答案正是我想要的。谢谢!如何存储结果数据框?

以上是关于如何根据 Python、R 中不同数据框/患者之间的第一列元素/基因取第二列值/计数的平均值?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据条件在 Python 中对数据帧进行下采样

python - 如何选择两个数据框之间的差异及其不同的列

根据条件验证R中两个数据框之间的列中的值

视频R语言生存分析原理与晚期肺癌患者分析案例|数据分享|附代码数据

如果在 R 中满足某些行和列之间的条件,则确定一个值

用户定义函数将多个数据框导出到全局环境中