如何从R中的命名数字向量中检索简单数值?

Hom*_*lli 5 r

我使用R来计算一些基本的统计结果.我正在使用quantile()函数来计算数据帧列上的分位数,如下所示.

> quantile(foobars[,1])
     0%     25%     50%     75%    100% 
 189000  194975  219500  239950 1000000 
Run Code Online (Sandbox Code Playgroud)

我希望能够单独访问计算的分位数.但是,我似乎无法找到如何做到这一点.当我检查返回结果的类时,它是一维数字.

我试过这个:

> q <- quantile(foobars[,1])
> q[3]
   50% 
219500
Run Code Online (Sandbox Code Playgroud)

这似乎返回一个元组(分位数级别+数字).我只对这个数字感兴趣(在这种情况下为219500).

我怎么才能将数字只能访问一个简单的(数字)变量?

Rei*_*son 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%" ...
Run Code Online (Sandbox Code Playgroud)

所有"命名"位意味着向量具有"names"包含(在这种情况下)分位数标签的附加属性.R将这些打印为命名向量,因为它们被认为有助于打印输出(如果存在).但是,它们决不会改变这是一个数字向量的事实.您可以在计算中使用它们,就像它们没有"names"属性一样:

> q[3] + 10
     50% 
9.882214
Run Code Online (Sandbox Code Playgroud)

如果名字困扰你,则unname()存在删除它们的功能:

> q2 <- unname(q)
> q2
[1] -2.2853903 -0.5327520 -0.1177865  0.5182007  2.4825565
Run Code Online (Sandbox Code Playgroud)

为了完整起见,我应该补充一点,你可以"names"使用names()函数提取,该函数也有一个赋值版本('names<-'()).因此,从向量中删除名称的另一种方法是分配NULL名称:

> q3 <- q
> names(q3)
[1] "0%"   "25%"  "50%"  "75%"  "100%"
> names(q3) <- NULL
> names(q3)
NULL
Run Code Online (Sandbox Code Playgroud)

  • `as.vector(q)`也会删除名字 (2认同)