我想用if语句而不是ifelse语句来改变列值。既然,我没有找到正确的陈述,我试过这个:我有一个数据帧test
index
A lunch
B kunch
我跑
tmp<-mutate(test,index=ifelse(index == "kunch","flunch",test$index))
我得到tmp
索引 1 2 2 flunch
如何保留值lunch
?
编辑:
structure(list(index = structure(c(2L, 1L), .Label = c("kunch",
"lunch"), class = "factor")), .Names = "index", row.names = c("A",
"B"), class = "data.frame")
答案 0 :(得分:1)
由于“flunch”属于character
类型,ifelse
会返回character
的向量。它需要转换为factor
的索引,但它不能用as.character
来做,所以你必须自己做:
tmp <- mutate(test,index=ifelse(index=="kunch", "flunch", as.character(index)))
如果您需要将index
保留为factor
,则可以:
tmp$index <- as.factor(tmp$index)
您也可以简单地更改level
:
levels(test$index)[levels(test$index)=="kunch"] <- "flunch"