有没有一种函数可以翻转数据表中某个值的出现次数,而不是按频率排序呢?例如,我有这样一个数据表:
重新排序数据表,使其按降序频率排列:
然后将原始订单重新插入到表中:
我现在有一个“键”,显示我需要将初始值乘以多少次才能翻转它出现的次数。例如,“a,a”出现的次数需要乘以三,“b,b”需要乘以两次,“c,c”需要乘以一次。
我不确定如何实际复制原始表中的值,这似乎是一个不好的方法,因为它会使表的长度加倍。
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)
And wish to produce this:
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)
重新排序数据表,使其按降序频率排列:
initial.frequencies = initial.frequencies[,.SD[order(N, decreasing = TRUE)]]
View(initial.frequencies)
然后将原始订单重新插入到表中:
initial.frequencies$inversion.key = inversion.key
View(initial.frequencies)
我现在有一个“键”,显示我需要将初始值乘以多少次才能翻转它出现的次数。例如,“a,a”出现的次数需要乘以三,“b,b”需要乘以两次,“c,c”需要乘以一次。
我不确定如何实际复制原始表中的值,这似乎是一个不好的方法,因为它会使表的长度加倍。
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()
),并翻转其中的 $lengths。 - jogorle
方法还假定初始数据已经按出现次数排序。 - mt1022