如果没有别的话就变异

时间:2017-07-20 23:39:47

标签: r dplyr mutate

我想用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")

1 个答案:

答案 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"