gpt4 book ai didi

r - 在 R 中,如何优雅地计算多列的中位数,然后计算每行中超过中位数的单元格数?

转载 作者:行者123 更新时间:2023-12-04 10:26:34 24 4
gpt4 key购买 nike

假设我有以下数据框:

Base Coupled Derived Decl
1 0 0 1
1 7 0 1
1 1 0 1
2 3 12 1
1 0 4 1

这是 dput 输出:

temp <- structure(list(Base = c(1L, 1L, 1L, 2L, 1L), Coupled = c(0L,7L, 1L, 3L, 0L), Derived = c(0L, 0L, 0L, 12L, 4L), Decl = c(1L, 1L, 1L, 1L, 1L)), .Names = c("Base", "Coupled", "Derived", "Decl"), row.names = c(NA, 5L), class = "data.frame")

我想计算每一列的中位数。然后,对于每一行,我想计算大于各自列中位数的单元格值的数量,并将其附加为名为 AboveMedians 的列。

在示例中,中位数为 c(1,1,0,1)。我想要的结果表是

Base Coupled Derived Decl AboveMedians
1 0 0 1 0
1 7 0 1 1
1 1 0 1 0
2 3 12 1 3
1 0 4 1 1

什么是优雅的 R 方法来做到这一点?我有一些涉及 for 循环和 sapply 的东西,但这似乎不是最佳选择。

谢谢。

最佳答案

data.frame转成matrix后,我们就可以使用matrixStats中的rowMedians了。

library(matrixStats)
Medians <- colMedians(as.matrix(temp))
Medians
#[1] 1 1 0 1

然后,复制 'Medians' 以使维度等于 'temp' 的维度,进行比较并获得逻辑矩阵上的 rowSums

temp$AboveMedians <- rowSums(temp >Medians[col(temp)])
temp$AboveMedians
#[1] 0 1 0 3 1

或者 base R 唯一的选项是

 apply(temp, 2, median)
# Base Coupled Derived Decl
# 1 1 0 1

rowSums(sweep(temp, 2, apply(temp, 2, median), FUN = ">"))

关于r - 在 R 中,如何优雅地计算多列的中位数,然后计算每行中超过中位数的单元格数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37708568/

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