我无法根据现有的分类列(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
我不知道如何克服这个问题。
答案 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)