【问题标题】:how to change value with repetition less than a specific number to "other" in dataframe如何将重复次数小于特定数字的值更改为数据框中的“其他”
【发布时间】:2022-01-16 15:30:25
【问题描述】:

我有一个数据框,它的“S.A”列中有 20 多个类型值。我展示了以下列的示例:

structure(list(`temp$S.A[1:30]` = c("Yaletown", "Fairview VW", 
"West End VW", "Fairview VW", "Downtown VW", "Hastings", "Yaletown", 
"Main", "Marpole", "West End VW", "Yaletown", "Yaletown", "Kitsilano", 
"Hastings East", "Grandview VE", "Grandview Woodland", "Downtown VW", 
"Downtown VW", "West End VW", "Downtown VE", "West End VW", "West End VW", 
"West End VW", "Yaletown", "Downtown VW", "West End VW", "Downtown VW", 
"West End VW", "Yaletown", "West End VW")), row.names = c(NA, 
-30L), class = "data.frame") 

如果我使用table 函数,我会得到如下所示的结果,其中显示了我的数据框中 S.A 的所有可能值:

现在,我想做的是将重复次数少于 100 的名称替换为“其他”。例如,在下面显示的值中,“Arbutus”重复少于 100 次,因此我想将所有“Arbutus”值更改为“其他”以减少变量数量。 我尝试了这段代码来查找名称:

    aa <- as.data.frame(table(temp$S.A))
    bb <- subset(aa, aa$Freq < 100)
    cc <- bb[1]

这有助于我找到名称,但是,我不确定如何继续并替换它们。

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    要继续使用您可能使用的东西 -

    temp$S.A[temp$S.A %in% cc] <- 'Other'
    

    cc 中的所有可用值更改为"Other"


    但是,forcats 具有执行此操作的功能fct_lump_min

    temp$S.A <- forcats::fct_lump_min(temp$S.A, 100)
    

    【讨论】:

    • 谢谢,由于某种原因,第一种方法不起作用,但第二种方法很棒!它奏效了
    • 也许使用cc &lt;- bb[[1]] 会起作用。
    • @RonakShah 我认为 //tmp// 需要更改为 /temp//
    猜你喜欢
    • 2021-11-30
    • 2022-01-05
    • 2017-12-15
    • 2022-12-06
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多