我想基于它们的名称和另一个列值将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
答案 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")))