gpt4 book ai didi

r - 使用 R 计算比率矩阵

转载 作者:行者123 更新时间:2023-12-05 04:31:58 25 4
gpt4 key购买 nike

我想知道是否有一种简单的方法可以计算数据框中每个元素的比率矩阵。示例 -

gene sample1 sample2 sample3 sample4 .....
aa 2 2 3 2
aa 1 5 2 1
aa 4 1 2 3
bb 1 2 1 2
bb 2 1 1 2

I 是从 sample1 到 sample4 的每个元素的比率,计算出每一列中基因中的公共(public)行值。计算将是这样的 -

gene sample1 sample2 sample3 sample4 .....
aa 2/7 2/8 3/7 2/6
aa 1/7 5/8 2/7 1/6
aa 4/7 1/8 2/7 3/6
bb 1/3 2/3 1/2 2/4
bb 2/3 1/3 1/2 2/4

结果是这样的-

gene  sample1  sample2  sample3  sample4 .....
aa .28 .25 .42 .33
aa .14 .62 .28 .16
aa .57 .12 .28 .5
bb .33 .66 .5 .5
bb .66 .33 .5 .5

我在循环中尝试过的是这个-

tf <- dd %>%
group_by(symbol) %>%
summarise_if(is.numeric, mean)

但这总结了但不计算每个元素并保持初始数据帧的相同矩阵维度(例如这里是它的 dd)。任何建议将不胜感激。

最佳答案

你可以这样做:

library(dplyr)

dat %>%
group_by(gene) %>%
mutate(across(everything(), proportions)) %>%
ungroup()

# A tibble: 5 x 5
gene sample1 sample2 sample3 sample4
<chr> <dbl> <dbl> <dbl> <dbl>
1 aa 0.286 0.25 0.429 0.333
2 aa 0.143 0.625 0.286 0.167
3 aa 0.571 0.125 0.286 0.5
4 bb 0.333 0.667 0.5 0.5
5 bb 0.667 0.333 0.5 0.5

如果您有想要忽略的缺失值,请使用:

dat %>%
group_by(gene) %>%
mutate(across(everything(), ~ .x / sum(.x, na.rm = TRUE)))

数据:

dat <- structure(list(gene = c("aa", "aa", "aa", "bb", "bb"), sample1 = c(2, 
1, 4, 1, 2), sample2 = c(2, 5, 1, 2, 1), sample3 = c(3, 2, 2,
1, 1), sample4 = c(2, 1, 3, 2, 2)), class = "data.frame", row.names = c(NA,
-5L))

关于r - 使用 R 计算比率矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71747023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com