2014-05-09 17 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