2014-05-09 20 views
0

这个答案可能很明显(我希望是这样),但我一直只找到复杂的解决方案。我想要做的是根据另一个因素的水平有条件地重新评估一个因素。有条件地重估R中的一个因子

下面是一个使用mtcars数据集的例子:

data(mtcars) 
mtcars$gear <- as.factor(mtcars$gear) 
mtcars$am <- as.factor(mtcars$am) 

table(mtcars$gear, mtcars$am) # examining the levels 
levels(mtcars$gear) 
# [1] "3" "4" "5" 
levels(mtcars$am) 
"0" "1" 

现在用的齿轮级的汽车之间的“5”,我该怎么分配的“6” 一个新的“齿轮”一级那些“am”级别为“1”,同时保留“gear”的因子级别为“3”,“4”,“5”?这是一个更简单的例子,但考虑到我的数据集的复杂性,我宁愿将向量作为因子保存(例如,不能转换为数字和后面的数据)。

回答

2

没有“6”级的齿轮开始,所以你需要创建一个:

levels(mtcars$gear) <- c(levels(mtcars$gear), "6") 

然后,您可以有条件地与[<-功能分配:

mtcars$gear[ mtcars$am==1 ] <- "6" 
table(mtcars$gear, mtcars$am) 

    0 1 
    3 15 0 
    4 4 0 
    5 0 0 
    6 0 13 

你不能如果因子属性中没有相应的“级别”,则将值分配给因子变量。

+0

美丽,简单的解决方案! (我的Rube Goldberg-esque解决方法需要转换为数字并返回。) – statsRus

+0

我发现因素很容易出错。我通常宁愿将所有内容都留作字符或整数,以便实际进行分析。 Terry Therneau,我非常尊重,他说梅奥诊所强制要求'选项(stringsAsFactors = FALSE)' –

+0

良好的工作流程提示会留下因素直到结束!我很好奇 - 总的来说,你发现R方面的因素有哪些容易出错? – statsRus