有沒有函數可以反轉的數值 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