中位数()的奇怪行为?

Jas*_*n B 10 r

median()函数应用于数据帧时,我注意到一些不一致的行为."行为不一致"通常意味着我不理解某些事情,所以我希望有人愿意为我解决这个问题.

我知道一些功能(例如,min(),max())转换数据帧到载体和用于在整个DF返回对应的值mean()sd()对于每列返回一个值.虽然有点令人困惑,但这些行为上的差异不会引起很多问题,因为如果返回标量而不是向量,大多数代码都会中断.但是,median()似乎不一致.例如:

dat <- data.frame(x=1:100, y=2:101)
median(dat)
Run Code Online (Sandbox Code Playgroud)

返回一个向量:[1] 50.5 51.5

但是,有时会打破:

dat2 <- data.frame(x=1:100, y=rnorm(100))
median(dat2)
Run Code Online (Sandbox Code Playgroud)

返回: [1] NA NA Warning messages: 1: In mean.default(X[[1L]], ...) : argument is not numeric or logical: returning NA 2: In mean.default(X[[2L]], ...) : argument is not numeric or logical: returning NA

然而,median(dat2$x)median(dat2$y)这两个产生正确的结果.

还要考虑以下事项:

dat3 <- data.frame(x=1:100, y=1:100)
dat4 <- data.frame(x=1:100, y=100:199)
Run Code Online (Sandbox Code Playgroud)

在上面,median(dat3)返回[1] 50.5 NAmedian(dat4)返回[1] 50.5 149.5!我希望这两个或两个都不起作用.所以,我显然不理解该median()功能是如何工作的.

此外,功能,如sd,mean(),min()max()所有收率在所有上述情况下,它们预期的(如果表面上矛盾的)的结果.

我知道我可以使用类似的东西sapply(dat2, median)获得必要的结果,但我想知道为什么R众神选择以某种方式实现这些核心统计功能,至少从表面上看,似乎不一致.我怀疑我,可能还有其他新手,可能不理解一些基本概念,我很感激你的见解.

Jos*_*ich 12

最近在R-devel 的中值和数据帧线程讨论了这种确切的现象.共识似乎是该mean.data.frame方法应该被弃用,用户应该依赖sapply.

  • 完美,谢谢!没有找到那个帖子我有点尴尬.很明显,'mean`和`sd`是不一致的函数,而不是`median`(尽管我仍然认为它在其他方面不一致).事后看来,期望一个通常聚合数字向量的函数完全适用于数据帧是很奇怪的.一个更好的问题会问为什么mean.data.frame首先被实现. (2认同)

aL3*_*3xa 5

median对于data.frame类对象没有得到一个metod ,不像mean.使用plyr包和colwise功能来达到预期的效果.或者使用*apply功能族.

> sapply(mtcars, median)                                                                                                     
    mpg     cyl    disp      hp    drat      wt    qsec      vs      am    gear                                              
 19.200   6.000 196.300 123.000   3.695   3.325  17.710   0.000   0.000   4.000                                              
   carb                                                                                                                      
  2.000                                                                                                                      
> colwise(median)(mtcars)                                                                                                    
   mpg cyl  disp  hp  drat    wt  qsec vs am gear carb                                                                       
1 19.2   6 196.3 123 3.695 3.325 17.71  0  0    4    2 
Run Code Online (Sandbox Code Playgroud)