gpt4 book ai didi

r - 是否有函数可以反转 data.table 中值的出现次数?

转载 作者:行者123 更新时间:2023-12-05 04:10:43 25 4
gpt4 key购买 nike

是否有函数可以反转 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)

我现在有一个“键”,显示初始值需要乘以多少次才能反转它出现的次数。 IE。我需要将 '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)

最佳答案

如果我们使用 OP 的方法,则只需通过“N”的反向复制行并将“N”分配给 NULL

initially[, .N, by = initially][rep(seq_len(.N), rev(N))][, N := NULL][]

关于r - 是否有函数可以反转 data.table 中值的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44082278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com