无法根据现有的分类列创建数值列

时间:2014-02-22 15:59:20

标签: r

我无法根据现有的分类列(NicePch)创建数字列(data$vegetation),其中包含值“mats”或“种子”。

> 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

我不知道如何克服这个问题。

3 个答案:

答案 0 :(得分:1)

尝试

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

问题是你开始将NicePch定义为具有特定级别的因素(data$vegetation中的任何值,所以当你尝试添加一个不是其中一个级别的值时(例如如你所做的那样,你从因子中得到错误。

在这里,我们使用match将地图/种子映射到值1或2,然后使用它从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

答案 1 :(得分:1)

如果您的因素只有两个级别,则可以使用此方法:

NicePch <- 1 + (data$vegetation == "seeds") * 15

答案 2 :(得分:1)

NicePch <- ifelse(data$vegetation == "mats", 1, 16)