r - 尝试根据 if_else 条件更改变量值时 mutate() 出现 dplyr 错误
问题描述
我正在尝试使用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
is 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
推荐阅读
- time-series - tslearn TimeSeriesKMeans 输出
- java - 在 JUnit 测试中从 for 循环中获取用户输入,现在如何实际测试其输出?
- c++ - 一个具有挑战性的字符串问题:在字符串中显示所有出现的子字符串的索引时出现问题(C++)
- html - 我用这个 iframe 来显示这个页面。但我无法得到任何结果
- oracle-apex - APEX set Style on Text Area
- javascript - 如何在不同的文件夹中调用 CSS?
- javascript - Vb.net 代码使用计时器自动在 2 个网格视图之间切换页面
- flutter - 如何在颤动中将字符串格式化为日期?
- sql - 在 PowerShell 中调用 SQL 查询失败
- r - 计算R中另一列(id)中唯一值的数量