2017-11-25 34 views
1

象徵是汽車的保險風險評級。levels()不接受負值。任何解決方法?

str(carprice$symboling) 

$ symboling:係數W/6水平 「-2」, 「 - 1」, 「0」,..:6 6 4 5 5 5 4 4 4 3 ...

levels(carprice$symboling)[-2:-1] <- "safe" 
levels(carprice$symboling)[0:1] <- "mild risky" 
levels(carprice$symboling)[2:3] <- "risky" 

str(carprice$symboling) 

$符號:具有「輕微風險」,「有風險」的因子w/2級別:2 2 2 2 2 2 2 2 2 2 ...

爲什麼預計不到負數級別?

+0

注意引號'「-2」'在輸出 - 'levels'是'character'矢量,而不是索引 – MichaelChirico

回答

2

R中的索引從1開始。它表示值在vector中的位置。它可以是data.frame,matrix中的列索引或行索引。在這裏,我們試圖根據已經存在的層次的位置,將'符號'列的levels分配給一個特定的值。假設水平在-2順序:3,前兩個層次將被分配到「安全」,然後在接下來的2到「輕度危險」,最後2「風險」

levels(carprice$symboling)[1:2] <- "safe" 
levels(carprice$symboling)[3:4] <- "mild risky" 
levels(carprice$symboling)[5:6] <- "risky" 

這可以在一個單一步驟中進行過

levels(carprice$symboling) <- setNames(rep(c('safe', 'mild risky', 'risky'), each = 2), 
       -2:3)[levels(carprice$symboling)] 

由於重複的例子

set.seed(24) 
v1 <- factor(sample(-2:3, 20, replace = TRUE)) 
levels(v1) <- setNames(rep(c('safe', 'mild risky', 'risky'), each = 2), -2:3)[levels(v1)] 
相關問題