如何使用data.table有效地计算行中位数

凯文·高里

我有一个相当大的data.table(1500万行,15列),我想为其计算每行的中位数。我可以使用

apply(DT, 1, median)  # DT is my data.table

但这很慢。是否有更快的,对data.table友好的替代方法?

作为一个小的工作示例,如果我有

DT = data.table(a = c(1, 2, 4), b = c(6, 4, 7), 
                c = c(3, 9, 9), d = c(18, 1, -5))
#    a b c  d
# 1: 1 6 3 18
# 2: 2 4 9  1
# 3: 4 7 9 -5

计算行中位数的最有效方法是什么?

apply(DT, 1, median)
# [1] 4.5 3.0 5.5
夏普

一个选项是使用包中rowMedians

library(matrixStats)
DT[, med := rowMedians(as.matrix(.SD))][]

这使:

> DT
   a b c  d med
1: 1 6 3 18 4.5
2: 2 4 9  1 3.0
3: 4 7 9 -5 5.5

或仅使用data.table

DT[, med := melt(DT, measure.vars = names(DT))[, r := 1:.N, variable][, median(value), by = r]$V1][]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何有效地用数据框中的中位数替换范围

我们如何才能有效地计算Elixir中整数的位数?

如何有效地计算data.table的唯一(数字)列向量?

如何有效地使用OWLAPI计算脱节?

如何使用 NumPy 有效地计算行上的成对比率?

如何使用data.table有效地计算一对坐标之间的距离

按列(x,y)分组时如何有效地计算z列的多个分位数

如何更有效地计算滚动比

如何有效地计算怪异数字

如何有效地计算顶部排列

如何有效地使可编辑的行?

如何使用data.table在多个列(loci)中按组有效地计算等位基因频率(比例)

如何有效地获得许多四分位数?

如何有效地从单个点计算熊猫数据框中每一行的距离?

如何有效地计算R中稀疏矩阵的每一行的平方和?

如何有效地语法

有效地使用ConcurrentHashMap?

有效地使用parfor

如何有效地使用计数器变量来计算点数?

如何有效地两次使用此计算结果?

如何使用 EntityFramework 有效地计算表中存在的项目数?

如何使用 Pandas 有效地计算前后行索引之间的平均值

如何很好地有效地计算多个区间之间的总重叠?

如何有效地对data.table中的向量列进行操作

如何最有效地将列设置为data.table中的NA?

内存有效地将一行插入到data.table对象中?

使用data.table有效地模拟数据

如何有效地使用data.table来解决此问题?请看新版本

如何使用Hibernate有效地从表中获取所有行?