如何非对称地获取两列之间每行的中位数?

时间:2016-02-20 07:36:28

标签: r

我正在尝试对一个非常大的数据集进行一些汇总统计,我需要生成包含2列的数据帧的每一行的中值,然后将其存储为数据帧。我是迭代地做的,但是它占用的时间太长而且我的系统崩溃了。

为避免循环缓慢,我尝试使用mapply,如下所示:

Center_Point<-mapply(median, c(File$V2, File$V3))

但它只返回单个值的中位数,而不是这两列共享的行的中位数。有没有办法在任何应用函数中执行此操作,或者我应该切换到像Java一样更快的东西?

2 个答案:

答案 0 :(得分:2)

matrixStats

中考虑rowMedians()
> m = matrix(rnorm(100000), ncol=2)
> identical(matrixStats::rowMedians(m), apply(m, 1, median))
[1] TRUE
> system.time(matrixStats::rowMedians(m))
   user  system elapsed 
  0.003   0.000   0.009 
> system.time(apply(m, 1, median))
   user  system elapsed 
  2.032   0.000   2.033 

答案 1 :(得分:0)

我们可以将applyMARGIN=1

一起使用
apply(File[c('V2', 'V3')], 1, median, na.rm=TRUE)

Map/mapply将函数应用于listvector等的相应元素。由于我们有两个vectors,我们可以将它们指定为输入参数并获取median

mapply(median, File[,'V2'], File[,'V3'])