首页 > 解决方案 > 使用 mutate 和 ifelse 进行条件赋值

问题描述

有了这种数据(见下文),我尝试IRISCOM使用 mutate() 基于条件测试创建一个新列。

COMMUNE|IRIS|NB
35360|353600101|45
35361|ZZZZZZ|72

我试过了data=mutate(data, IRISCOM= ifelse(IRIS == "ZZZZZZZZZ", COMMUNE, IRIS))

它正确写入 COMMUNE,但确实1按预期代替了 IRIS 代码。

我尝试了更多的实验,但没有成功。

标签: rdplyr

解决方案


要解决此factor问题(请参阅我上面的评论),我们可以执行以下操作

library(tidyverse)
data %>%
    mutate_if(is.factor, as.character) %>%
    mutate(IRISCOM = ifelse(IRIS == "ZZZZZZ", COMMUNE, IRIS))
#  COMMUNE      IRIS NB   IRISCOM
#1   35360 353600101 45 353600101
#2   35361    ZZZZZZ 72     35361

样本数据

data <- read.table(text =
    "COMMUNE|IRIS|NB
35360|353600101|45
35361|ZZZZZZ|72", header = T, sep = "|")

推荐阅读