2014-02-22 26 views
0

我無法基於包含值「mats」或「seeds」的現有分類列(data$vegetation)創建數字列(NicePch)。現在在創建基於現有分類列的數字列時遇到問題

> NicePch <- data$vegetation 

> class(data$vegetation) 
[1] "factor" 


> class(NicePch) 
[1] "factor" 

,我想用1來代替 「墊」 的價值觀,並與16

> NicePch[data$vegetation=="mats"] <- 1 

「種子」 值,但我得到以下警告消息:

In `[<-.factor`(`*tmp*`, data$vegetation == "mats", value = 1) : invalid factor level, NA generated 

我不知道如何克服這一點。

+0

這是否包含的因素只有兩個水平? –

回答

1

嘗試

NicePch <- c(1, 16)[match(data$vegetation, c("mats", "seeds"))] 

問題是你開始定義NicePch與特定水平的因素(也有在data$vegetation,所以當你嘗試添加值不是其中一個級別(任何值如:1爲你做),你從因素得到錯誤

在這裏,我們映射圖/種子值1或2 match,然後用從c(1, 16)挑選下面是一個例子:

data <- data.frame(vegetation=c("mats", "seeds", "seeds", "mats", "alligators")) 
(NicePch <- c(1, 16)[match(data$vegetation, c("mats", "seeds"))]) 
# [1] 1 16 16 1 NA 
+0

+1對於使用兩個以上因子水平的方法。 –

+0

太棒了!謝謝。 – anja

1

您可以使用此方法,如果您的因子恰好兩個層次:

NicePch <- 1 + (data$vegetation == "seeds") * 15 
1
NicePch <- ifelse(data$vegetation == "mats", 1, 16) 
+0

@agstudy當然,繼續。我的電子郵件也在我的個人資料中。 –

+0

@agstudy hong(at)zipworld.com.au –