gpt4 book ai didi

r - R 3.2.1 中的组合因子水平

转载 作者:行者123 更新时间:2023-12-02 05:28:16 25 4
gpt4 key购买 nike

在 RI 的早期版本中,我可以使用以下小函数组合没有“显着”体积阈值的因子水平:

whittle = function(data, cutoff_val){
#convert to a data frame
tab = as.data.frame.table(table(data))
#returns vector of indices where value is below cutoff_val
idx = which(tab$Freq < cutoff_val)
levels(data)[idx] = "Other"
return(data)
}

这需要一个因子向量,寻找“不够频繁”出现的水平,并将所有这些水平组合成一个“其他”因子水平。示例如下:

> sort(table(data$State))

05 27 35 40 54 84 9 AP AU BE BI DI G GP GU GZ HN HR JA JM KE KU L LD LI MH NA
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
OU P PL RM SR TB TP TW U VD VI VS WS X ZH 47 BL BS DL M MB NB RP TU 11 DU KA
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3
BW ND NS WY AK SD 13 QC 01 BC MT AB HE ID J NO LN NM ON NE VT UT IA MS AO AR ME
4 4 4 4 5 5 6 6 7 7 7 8 8 8 9 10 11 17 23 26 26 30 31 31 38 40 44
OR KS HI NV WI OK KY IN WV AL CO WA MN NH MO SC LA TN AZ IL NC MI GA OH ** CT DE
45 47 48 57 57 64 106 108 112 113 120 125 131 131 135 138 198 200 233 492 511 579 645 646 840 873 1432
RI DC TX MA FL VA MD CA NJ PA NY
1782 2513 6992 7027 10527 11016 11836 12221 15485 16359 34045

现在,当我使用 whittle 时,它会返回以下消息:

> delete = whittle(data$State, 1000)
Warning message:
In `levels<-`(`*tmp*`, value = c("Other", "Other", "Other", "Other", :
duplicated levels in factors are deprecated

如何修改我的函数以使其具有相同的效果但不使用这些“已弃用”的因子水平?转成字符,制表,再转成字符“其他”?

最佳答案

我一直发现转换为字符并返回以进行这些类型的操作是最简单的(减少打字和头痛)。与您的 as.data.frame.table 保持一致并使用 replace 替换低频级别:

whittle <- function(data, cutoff_val) {
tab = as.data.frame.table(table(data))
factor(replace(as.character(data), data %in% tab$data[tab$Freq < cutoff_val], "Other"))
}

测试一些样本数据:

state <- factor(c("MD", "MD", "MD", "VA", "TX"))
whittle(state, 2)
# [1] MD MD MD Other Other
# Levels: MD Other

关于r - R 3.2.1 中的组合因子水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076650/

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