我有一个包含三个级别的向量,分别是" M"," S"和"未知"
我想将它们更改为数字(整数)值,如下所示:
如果" M"然后值2(整数)
如果" S"然后值1(整数)
如果"未知"然后是0(整数)
我打算像这样一个一个地改变它们:
cards$MaritalStatus[cards$MartialStatus == "M"] <- 2
然而,我有例外:
Warning message:
In `[<-.factor`(`*tmp*`, cards$MartialStatus == "M", value = c(1L, :
invalid factor level, NA generated
请帮忙吗?
答案 0 :(得分:4)
我会使用match执行此操作:
match(cards$MaritalStatus, c("unknown", "S", "M")) - 1
答案 1 :(得分:2)
尝试
v1 <- factor(c("M","S","unknown","M","S"))
keyval <- setNames(0:2, c('unknown', 'S', 'M'))
as.numeric(keyval[as.character(v1)])
#[1] 2 1 0 2 1
或者
as.numeric(as.character(factor(v1, levels=c('M', 'S', 'unknown'),
labels=c(2,1,0)) ))
#[1] 2 1 0 2 1
答案 2 :(得分:1)
如果您的值超过3,我不会采用这种方法,但在这种情况下,您可以使用嵌套的ifelse语句,如下所示:
ifelse(cards$MaritalStatus=="unknown", 0, ifelse(cards$MaritalStatus=="M", 2, 1))
答案 3 :(得分:0)
这是一种更通用的方法(也许更容易理解):
1st - 声明值以及它们应该更改为什么。
namesList <- list(M=2, A=1, unknown=0)
第二 - 应用更改
unlist(namesList[as.character(cards$MaritalStatus)])