【发布时间】:2015-08-14 07:23:47
【问题描述】:
我有一个包含 1465 个观察值和 1074 个变量的数据框。每列是一个日期,每一行是一个不同的股票代码。我需要对每个日期的代码进行排名。
到目前为止,我一直坚持只对数据集中的一列进行排名。在搜索互联网后,大多数来源似乎建议使用cut(X, quantile(X,(0:10)/10, include.lowest=TRUE。我试过了:
DecRanking <- Volume
DecRanking <- as.data.frame(DecRanking)
DecRanking2 <- NULL
DecRanking2 <- cut(DecRanking[,1], quantile(DecRanking[,1],(0:10)/10),include.lowest=TRUE)
DecRanking2 <- cut(DecRanking$X1.6.1995, quantile(DecRanking$X1.6.1995,(0:10)/10),include.lowest=TRUE)
这给出了错误:'breaks' are not unique。在 unique() 中包含五分位数函数时,它会显示完全错误的输出:
> head(DecRanking2)
[1] (1e+03,1.93e+04] [0,1e+03] [0,1e+03] (1e+03,1.93e+04] [0,1e+03] (1e+03,1.93e+04]
Levels: [0,1e+03] (1e+03,1.93e+04] (1.93e+04,4.33e+07]
我该如何解决这个问题以及如何实现所有列的计算?
编辑:
> head(DecRanking)
X1.6.1995 X1.13.1995 X1.20.1995 X1.27.1995 X2.3.1995 X2.10.1995 X2.17.1995 X2.24.1995 X3.3.1995 X3.10.1995 X3.17.1995
1 4300 0 0 3300 9900 200 200 400 3100 0 700
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 13700 4700 39400 2400 37645 51486 10000 41650 400 12007 22500
5 0 0 0 0 0 0 0 0 0 0 0
6 10300 6500 0 2500 4800 2500 0 15700 20 0 0
这只是数据的摘录。害怕陈述显而易见的事实 - 数据显然有 1,465 行和 1074 列
【问题讨论】:
-
你能提供给我们
head(DecRanking)的输出吗? -
我编辑了我的问题以包含
head(DecRanking)数据。 -
如果您的数据是稀疏的(根据头部样本),您可能不会填充所有 10 个十分位数。这就是错误
'breaks' are not unique的原因:您有多个十分位数的值相同为0,并且cut中的中断不能有重复值。所以你提到了错误的输出。也许你可以举一个正确输出的例子,这样我们就可以弄清楚你想如何处理,例如其中值为 0 并且十分位数 0%、10%、... 40% 都是 0,您的输出应该是什么样的? -
查看 dplyr 包,了解如何查找数字列元素的排名。有一个“排名”命令。
标签: r