我使用R来计算一些基本的统计结果。我正在使用quantile()函数来计算数据帧列上的分位数,如下所示。
> quantile(foobars[,1])
0% 25% 50% 75% 100%
189000 194975 219500 239950 1000000
我希望能够单独访问计算的分位数。但是,我似乎无法找到如何做到这一点。当我检查返回结果的类时,它是一维数字。
我试过了:
> q <- quantile(foobars[,1])
> q[3]
50%
219500
这似乎返回一个元组(分位数级别+数字)。我只对这个数字感兴趣(在这种情况下为219500。
我怎样才能将数字只能访问一个简单的(数字)变量?
答案 0 :(得分:16)
您将数值的打印表示与实际值混淆。就R而言,q
包含一个命名的数字向量:
> dat <- rnorm(100)
> q <- quantile(dat)
> q
0% 25% 50% 75% 100%
-2.2853903 -0.5327520 -0.1177865 0.5182007 2.4825565
> str(q)
Named num [1:5] -2.285 -0.533 -0.118 0.518 2.483
- attr(*, "names")= chr [1:5] "0%" "25%" "50%" "75%" ...
所有“命名”位意味着向量具有包含(在这种情况下)分位数标签的附加属性"names"
。 R将这些打印为命名向量,因为它们被认为有助于打印输出(如果存在)。但是,它们决不会改变这是一个数字向量的事实。您可以在计算中使用它们,就像它们没有"names"
属性一样:
> q[3] + 10
50%
9.882214
如果名称困扰您,则存在unname()
函数以删除它们:
> q2 <- unname(q)
> q2
[1] -2.2853903 -0.5327520 -0.1177865 0.5182007 2.4825565
为了完整起见,我应该补充一点,您可以使用"names"
函数提取names()
,该函数也具有赋值版本('names<-'()
)。因此,从向量中删除名称的另一种方法是将NULL
分配给名称:
> q3 <- q
> names(q3)
[1] "0%" "25%" "50%" "75%" "100%"
> names(q3) <- NULL
> names(q3)
NULL