R 为数据表中每个组内的秩添加一个新列
我是R中data.table的新手,遇到以下问题: 我有一个数据表X:R 为数据表中每个组内的秩添加一个新列,r,data.table,R,Data.table,我是R中data.table的新手,遇到以下问题: 我有一个数据表X: date hour itemName numberOfItem 1: 2014-05-04 00 item-1 54 2: 2014-05-04 00 item-2 42 3: 2014-05-04 0
date hour itemName numberOfItem
1: 2014-05-04 00 item-1 54
2: 2014-05-04 00 item-2 42
3: 2014-05-04 00 item-3 33
4: 2014-05-04 00 item-4 31
5: 2014-05-04 00 item-5 30
6: 2014-05-04 00 item-6 28
7: 2014-05-04 00 item-7 27
8: 2014-05-04 00 item-7 26
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
100000: 2014-08-08 23 item-n 24
我必须在“numberOfItem”列的基础上,根据每个组(日期、小时)的分位数添加一个新的列排名。我使用此代码来实现以下目标:
quantfun <- function(x) as.integer(cut(x, quantile(x, probs=0:4/4), include.lowest=TRUE))
X[, Rank:= quantfun(numberOfItem),by="date,hour"]
然后我做了一些除错,发现一些分位数是相同的。因此,我使用以下代码:
quantfun <- function(x) as.integer(cut(x, unique(quantile(x, probs=0:4/4)), include.lowest=TRUE))
X[, Rank:= quantfun(numberOfItem),by="date,hour"]
任何帮助都将不胜感激。感谢您的帮助。我想问题可能出在
by=“date,hour”
。请尝试by=list(日期、小时)
并告诉我这是否有效。另外,请提供您的数据作为dput
的输出,这样我们可以更容易地再现您的问题。您应该检查X[,length=.N,by=list(date,hour)][,min(length)]
。谢谢Bernardo。我尝试过你的想法,但仍然得到同样的错误。问题肯定是cut
,与数据表
无关。错误告诉您这一点。您需要使您的休息时间为uniqueRoland:最小组长度为16。
quantfun <- function(x) as.integer(cut(x, unique(quantile(x, probs=0:4/4)), include.lowest=TRUE))
X[, Rank:= quantfun(numberOfItem),by="date,hour"]
"Error in cut.default(x, unique(quantile(x, probs = 0:4/4)), include.lowest = TRUE) :
invalid number of intervals"