有没有函数可以反转的数值 data.table,中的值,而不是按频率排序?例如。说我有这样的:是否有一个函数来反转data.table中值的出现次数?
install.packages('data.table')
require(data.table)
initially = data.table(initially = c('a,a','b,b','b,b','c,c','c,c','c,c'))
View(initially)
,并希望产生这样的:
required.inversion = data.table(required.inversion = c('a,a','a,a','a,a','b,b','b,b', 'c,c'))
View(required.inversion)
我想这样做的方式是产生一个频率表:
initial.frequencies = initially[, .N ,by = initially]
View(initial.frequencies)
它排序到确保它在上升次序:
initial.frequencies = initial.frequencies[,.SD[order(N)]]
View(initial.frequencies)
存储那些初始值的顺序:
inversion.key = initial.frequencies$initially
View(inversion.key)
重新排序data.table因此它在降序频率顺序:
initial.frequencies = initial.frequencies[,.SD[order(N, decreasing = TRUE)]]
View(initial.frequencies)
然后插入原始订单回表:
initial.frequencies$inversion.key = inversion.key
View(initial.frequencies)
我现在有一个'钥匙'显示我有多少ti mes初始值将需要相乘以反转它发生的次数。即我需要将'a','a'出现3次,'b,b'出现2次,'c,c'出现1次。
我不知道如何实际复制原始表中的值,这似乎是一种不好的方法,因为它也会使表的长度加倍。
this.approach.would.yield.this.in.the.ram = data.table(this.approach.would.yield.this.in.the.ram = c('a,a','b,b','b,b','c,c','c,c','c,c', 'a,a','a,a','a,a','b,b','b,b', 'c,c'))
View(this.approach.would.yield.this.in.the.ram)
'RLE()',然后反向( 'rev()')结果中的$长度。 – jogo
刚才提到的,'rle'方法还假定初始数据已经按出现次序排序。 – mt1022