如何在R中的一个分类变量中组合两个级别

时间:2015-05-04 14:24:59

标签: r

我现在正在学习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

为此目的,我可以使用哪个命令? 谢谢!  颜

4 个答案:

答案 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。它在您的浏览器中打开一个闪亮的应用程序,允许交互式重新编码,然后在控制台中输出正确的代码。