首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:"Binning“范畴变量

R:"Binning“范畴变量
EN

Stack Overflow用户
提问于 2015-03-10 16:24:46
回答 2查看 2.8K关注 0票数 3

我有一个data.frame,它有13列有因子。其中一栏包含信用评级数据,有54个不同的值:

代码语言:javascript
复制
levels(TR_factor$crclscod)
[1] "A"  "A2" "AA" "B"  "B2" "BA" "C"  "C2" "C5" "CA" "CC" "CY" "D" 
[14] "D2" "D4" "D5" "DA" "E"  "E2" "E4" "EA" "EC" "EF" "EM" "G"  "GA"
[27] "GY" "H"  "I"  "IF" "J"  "JF" "K"  "L"  "M"  "O"  "P1" "TP" "U" 
[40] "U1" "V"  "V1" "W"  "Y"  "Z"  "Z1" "Z2" "Z4" "Z5" "ZA" "ZY" 

我想要的是将这些类别“放入”

代码语言:javascript
复制
levels(TR_factor$crclscod)
[1] "all A"  "all B"   "all C"  "all D" [...] "all z"

我的尝试是使用这样的构造形式

代码语言:javascript
复制
crcls_reduced <- ifelse(TR_factor$crclscod %in% c("A","A2", "AA", "B", "B2","BA", "C" , "C2" ,"C5" ,"CA" ,"CC", "CY", "D",  "D2", "D4", "D5" ,"DA", "E" , "E2", "E4" ,"EA", "EC" ,"EF", "EM", "G" , "GA",  "GY" ,"H", "I",  "IF" ,"J" , "JF" ,"K", "L", "M", "O", "P1","TP", "U", "U1" ,"V",  "V1", "W" , "Y" , "Z" , "Z1", "Z2", "Z4" ,"Z5", "ZA", "ZY"), "A", "B", "C", "D", "E", "G", "H", "I", "J", "K", "L", "M", "O", "P", "T", "U", "V", "W", "Y", "Z")

但是当然,这个构造只能产生一个二进制输出。当然,我可以手动完成每封信的全部操作,但我希望堆栈溢出知道一种更快、更有效的方法--例如使用一些我不知道的包。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-10 16:36:00

你可以试试

代码语言:javascript
复制
 factor(paste('all', sub('(.).*$', '\\1', v1)))

代码语言:javascript
复制
 factor(paste('all', substr(v1, 1,1)))

数据

代码语言:javascript
复制
v1 <- c("A", "A2", "AA", "B", "B2", "BA", "C", "C2", "C5", "CA", "CC", 
"CY", "D", "D2", "D4", "D5", "DA", "E", "E2", "E4", "EA", "EC", 
"EF", "EM", "G", "GA", "GY", "H", "I", "IF", "J", "JF", "K", 
"L", "M", "O", "P1", "TP", "U", "U1", "V", "V1", "W", "Y", "Z", 
"Z1", "Z2", "Z4", "Z5", "ZA", "ZY")
票数 3
EN

Stack Overflow用户

发布于 2015-03-10 16:38:04

这似乎与@akrun的回答类似,并使用了以下事实:第一个字母是期望的新级别:

代码语言:javascript
复制
myf <- as.factor(paste(LETTERS, 1:100, sep=''))
myf_binned <- myf
levels(myf_binned) <- sapply(levels(myf_binned), 
                             function(l) substring(l, 1, 1))
myf_binned

然后,您就可以看到“bin”成员身份。

代码语言:javascript
复制
table(as.character(myf_binned))

# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
# 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3

编辑:

实际上,substring需要向量,所以它可以更简单

代码语言:javascript
复制
levels(myf_binned) <- substring(levels(myf_binned), 1, 1)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28968983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档