提问人:Sam 提问时间:3/8/2020 更新时间:3/8/2020 访问量:123
尝试根据if_else条件更改变量值时出现 mutate() 的 dplyr 错误
dplyr error with mutate() when attempting to change variable value based on if_else condition
问:
我正在尝试使用 更改变量的值。如果在数据集的 ID 列中找到来自字符向量的 ID,我想将列“确定性”的值从“不确定”更改为“可能”。如果不匹配,我想保留原始值。这是我当前尝试的 reprex:dplyr::mutate()
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
我应该如何解决这个问题?
答:
2赞
akrun
3/8/2020
#1
问题出在 中的参数顺序上。如果我们使用 ,它将返回其长度为 2 的长度。相反,它应该是另一种方式,即 e..g%in%
id_list
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
注意:是,所以它需要转换为或添加为另一个级别(如果我们想坚持类)certainty
factor
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
评论
0赞
Sam
3/8/2020
如此简单的解决方案。在我的真实数据集中,已经定义了多个级别。有没有办法将值更改为现有级别而不必转换为?certainty
likely
character
1赞
akrun
3/8/2020
@Sam 添加了另一个选项
评论