我现在正在学习R,我遇到了找到命令的问题。
我有分类数据
levels(job)
[1] "class1" "class2" "class3" "unknown"
现在我想简化这些级别,例如
type1
其中"admin."
包括"entrepreneur"
,"self-employed"
和type2
;
"blue-collar"
包括"management"
,"technician"
和type3
;
"housemaid"
包括"student"
,"retired"
,"services"
和unknown
;
"unknown"
包括"unemployed"
和>> WScript.Echo TypeName(FormatDateTime("12:00:00 PM"))
>>
String
。
为此目的,我可以使用哪个命令? 谢谢! 颜
答案 0 :(得分:10)
您可以分配到levels
:
levels(z)[levels(z)%in%c("unemployed","unknown","self-employed")] <- "unknown"
帮助文件中介绍了这一点 - 键入?levels
。
从@ akrun的答案中窃取,您可以使用哈希/列表最干净地做到这一点:
ha <- list(
unknown = c("unemployed","unknown","self-employed"),
class1 = c("admin.","management")
)
for (i in 1:length(ha)) levels(z)[levels(z)%in%ha[[i]]] <- names(ha)[i]
答案 1 :(得分:4)
您还可以创建一个&#39;键/值&#39;索引向量并使用它来替换&#39; job&#39;
中的元素indx <- setNames(rep(c(paste0('type',1:3), 'unknown'), c(3,3,4,2)),
c(levels(job)[c(1,3,7)], levels(job)[c(2,5,10)],
levels(job)[c(4,6,8,9)], levels(job)[c(11,12)]))
factor(unname(indx[as.character(job)]))
v1 <- c('admin.', 'blue-collar', 'entrepreneur', 'housemaid',
'management', 'retired', 'self-employed', 'services', 'student',
'technician', 'unemployed', 'unknown')
set.seed(24)
job <- factor(sample(v1, 50, replace=TRUE))
答案 2 :(得分:3)
尝试recode
包中的car
功能。
(发布为答案而非评论,如果其他人发布更好的答案,则会删除)
答案 3 :(得分:0)
另一种基础解决方案:创建character
向量,更改其值factor()
。
job <- as.character(job)
job[job %in% c("admin.","entrepreneur","self-employed")] <- "class1"
... # do the same for the other classes
job <- factor(job)
另一个解决方案是irec()
包中的questionr
。它在您的浏览器中打开一个闪亮的应用程序,允许交互式重新编码,然后在控制台中输出正确的代码。