小编Jam*_*s H的帖子

加快计算每个3元组列的行中位数

如果我有这样的数据框:

df = data.frame(matrix(rnorm(100), 5000, 100))
Run Code Online (Sandbox Code Playgroud)

我可以使用以下函数来逐行获得三项中位数的每个组合:

median_df = t(apply(df, 1, combn, 3, median))
Run Code Online (Sandbox Code Playgroud)

问题是,此功能需要几个小时才能运行.罪魁祸首是中位数(),运行时间比max()或min()大十倍.

如何加快这个功能,可能是通过编写更快版本的median()或以不同方式处理原始数据?

更新:

如果我运行上面的代码但仅针对df [,1:10]:

median_df = t(apply(df[,1:10], 1, combn, 3, median))
Run Code Online (Sandbox Code Playgroud)

需要29秒

fastMedian_df = t(apply(df[,1:10], 1, combn, 3, fastMedian))
Run Code Online (Sandbox Code Playgroud)

从包ccaPP需要6.5秒

max_df = t(apply(df[,1:10], 1, combn, 3, max))
Run Code Online (Sandbox Code Playgroud)

需要2.5秒

所以我们看到fastMedian()有了显着的改进.我们还能做得更好吗?

performance r function median dataframe

7
推荐指数
1
解决办法
197
查看次数

标签 统计

dataframe ×1

function ×1

median ×1

performance ×1

r ×1