gpt4 book ai didi

r - 创建 "other"字段

转载 作者:行者123 更新时间:2023-12-04 05:50:17 27 4
gpt4 key购买 nike

现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。

DF <- structure(list(Category = c("E", "K", "M", "L", "I", "A", 
"S", "G", "N", "Q"), n = c(163051, 127133, 106680, 64868, 49701,
47387, 47096, 45601, 40056, 36882)), .Names = c("Category",
"n"), row.names = c(NA, 10L), class = c("tbl_df", "tbl", "data.frame"
))

Category n
1 E 163051
2 K 127133
3 M 106680
4 L 64868
5 I 49701
6 A 47387
7 S 47096
8 G 45601
9 N 40056
10 Q 36882

我想从排名靠后的类别中按 n 创建一个“其他”字段。 IE。
        Category      n
1 E 163051
2 K 127133
3 M 106680
4 L 64868
5 I 49701
6 Other 217022

现在,我正在做
rbind(filter(DF, rank(rev(n)) <= 5), 
summarise(filter(DF, rank(rev(n)) > 5), Category = "Other", n = sum(n)))

它将所有不在前 5 名中的类别折叠到其他类别中。

但我很好奇在 dplyr 或其他一些现有包中是否有更好的方法。 “更好”是指更简洁/可读。我也对以更聪明或更灵活的方式选择 Other 的方法感兴趣。

最佳答案

不同的包/不同的语法版本:

library(data.table)

dt = as.data.table(DF)

dt[order(-n), # your data is already sorted, so this does nothing for it
if (.BY[[1]]) .SD else list("Other", sum(n)),
by = 1:nrow(dt) <= 5][, !"nrow", with = F]
# Category n
#1: E 163051
#2: K 127133
#3: M 106680
#4: L 64868
#5: I 49701
#6: Other 217022

关于r - 创建 "other"字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23730067/

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