我正在尝试使用更改变量的值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
注意: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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句