将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 NA 时median(dat4)返回[1] 50.5 149.5!我希望这两个或两个都不起作用.所以,我显然不理解该median()功能是如何工作的.
此外,功能,如sd,mean(),min()和max()所有收率在所有上述情况下,它们预期的(如果表面上矛盾的)的结果.
我知道我可以使用类似的东西sapply(dat2, median)获得必要的结果,但我想知道为什么R众神选择以某种方式实现这些核心统计功能,至少从表面上看,似乎不一致.我怀疑我,可能还有其他新手,可能不理解一些基本概念,我很感激你的见解.
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)