根据名称和其他列值将NA分配给列

时间:2018-11-14 08:10:40

标签: r dplyr

我想基于它们的名称和另一个列值将NA分配给列。 如以下示例所示:

鉴于数据帧虹膜,我想为名称以“ Sepal”开头的所有列和“ Species” ==“ setosa”开头的所有列分配NA

最好使用dplyr mutate_at / mutate_if的解决方案,也欢迎使用其他解决方案。

我尝试了

iris %>%
   mutate_if(str_detect(names(.), pattern = "Sepal") & (.$Species == "setosa") , function(x){x <- NA})

Error in tbl_if_vars(.tbl, .p, .env, ..., .include_group_vars = .include_group_vars) : 
  length(.p) == length(tibble_vars) is not TRUE

2 个答案:

答案 0 :(得分:4)

dplyr中,选择包含“ Sepal”的变量,并将NA分配给Species为“ setosa”的那些行:

iris %>%
  mutate_at(vars(contains("Sepal")), funs(ifelse(Species == "setosa", NA, .))) 

答案 1 :(得分:1)

或更短:

iris %>%
  mutate_at(vars(contains("Sepal")), 
            funs(na_if(Species, "setosa")))