尝试根据if_else条件更改变量值时,dplyr出现mutate()错误

山姆

我正在尝试使用更改变量的值dplyr::mutate()如果要在数据集中的ID列中找到来自字符向量的ID,我想将“确定性”列的值从“不确定”更改为“可能”。如果不匹配,我想保留原始值。这是我目前的尝试代表:

library(dplyr)
library(magrittr)

data <- data.frame(
  ID = c("a100", "b100", "c100", "d100", "e100", "f100"),
  certainty = c("confirmed", "likely", "unsure", "likely", "unsure", "confirmed")
)

data %<>% as_tibble()

id_list <- c("c100", "e100")

data %<>%
  mutate(certainty = if_else(id_list %in% ID, "likely", certainty))

输出应如下所示:

 ID    certainty
  <fct> <fct>    
1 a100  confirmed
2 b100  likely   
3 c100  likely   
4 d100  likely   
5 e100  likely   
6 f100  confirmed

目前,我收到此错误:

Error: `false` must be length 2 (length of `condition`) or one, not 6

我该如何解决?

阿克伦

问题在于中的参数顺序%in%id_list如果使用,它将返回其长度为2 id_list %in% ID相反,它应该是另一种方式,ID %in% id_list例如

1:3 %in% 1:2
#[1]  TRUE  TRUE FALSE

1:2 %in% 1:3
#[1] TRUE TRUE

在这里

library(dplyr)
data %>% 
      mutate(certainty = ifelse(ID %in% id_list, "likely", as.character(certainty)))

# A tibble: 6 x 2
#  ID    certainty
#  <fct> <chr>    
#1 a100  confirmed
#2 b100  likely   
#3 c100  likely   
#4 d100  likely   
#5 e100  likely   
#6 f100  confirmed

注意:certaintyfactor,因此需要将其转换为character或添加likely为另一个级别(如果我们要坚持学习factor


也可以保留为 factor

library(forcats)
data %>%
     mutate(certainty = fct_collapse(certainty,
              likely = as.character(certainty)[ID %in% id_list]))\
# A tibble: 6 x 2
#  ID    certainty
#  <fct> <fct>    
#1 a100  confirmed
#2 b100  likely   
#3 c100  likely   
#4 d100  likely   
#5 e100  likely   
#6 f100  confirmed

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章