首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何创建具有四分位数排名的列?

如何创建具有四分位数排名的列?
EN

Stack Overflow用户
提问于 2011-09-22 08:26:04
回答 7查看 40.8K关注 0票数 29

我在R中有一个名为tableOne的表,如下所示:

idNum        binaryVariable        salePrice
2               1                    55.56
4               0                    88.33
15              0                     4.45
87              1                    35.77
...            ...                    ...

我想用salePrice生成的值: summary(tableOne$salePrice)创建四个四分位数。然后,我想创建一个列表rows $ quartile,其中每行salePrice都有四分位数。它看起来是这样的:

idNum        binaryVariable            salePrice      quartile
    2               1                    55.56            3
    4               0                    88.33            4
    15              0                     4.45            1
    87              1                    35.77            2 
    ...            ...                    ...            ...  

有什么建议吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-22 08:36:18

这应该可以做到:

tableOne <- within(tableOne, quartile <- as.integer(cut(salesPrice, quantile(salesPrice, probs=0:4/4), include.lowest=TRUE)))

...Some详细信息:

within函数非常适合计算新列。您不必将列称为tableOne$salesPrice等。

tableOne <- within(tableOne, quartile <- <<<some expression>>>)

quantile函数计算分位数(在本例中为四分位数)。0:4/4的计算结果为c(0, 0.25, 0.50, 0.75, 1)

最后,cut函数将您的数据拆分为这些四分位数。但是你得到了一个名字很奇怪的factor,所以as.integer把它变成了组1,2,3,4

试试?within等,了解更多关于这里提到的函数……

票数 55
EN

Stack Overflow用户

发布于 2015-11-24 22:25:40

一种data.table方法

    library(data.table)
    tableOne <- setDT(tableOne)[, quartile := cut(salesPrice, quantile(salesPrice, probs=0:4/4), include.lowest=TRUE, labels=FALSE)]
票数 9
EN

Stack Overflow用户

发布于 2019-02-04 23:03:40

对于dplyr,您可以使用ntile函数:

ntile(x, n)


tableOne$quartile <- ntile(tableOne$salesPrice, 4)

这将向表中添加一列,根据n将分位数分配给具有价格分位数的每一行。

注意:此方法从1的较低值开始,然后向上递增。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7508229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档