我正在尝试对一个非常大的数据集进行一些汇总统计,我需要生成包含2列的数据帧的每一行的中值,然后将其存储为数据帧。我是迭代地做的,但是它占用的时间太长而且我的系统崩溃了。
为避免循环缓慢,我尝试使用mapply,如下所示:
Center_Point<-mapply(median, c(File$V2, File$V3))
但它只返回单个值的中位数,而不是这两列共享的行的中位数。有没有办法在任何应用函数中执行此操作,或者我应该切换到像Java一样更快的东西?
答案 0 :(得分:2)
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)
我们可以将apply
与MARGIN=1
apply(File[c('V2', 'V3')], 1, median, na.rm=TRUE)
Map/mapply
将函数应用于list
或vector
等的相应元素。由于我们有两个vectors
,我们可以将它们指定为输入参数并获取median
。
mapply(median, File[,'V2'], File[,'V3'])