r - R如何使用dplyr::mutate和if_else根据条件更改变量的值?
问题描述
我正在尝试更改 data.frame 中变量的值,如果满足条件,则变量采用另一个值,如果不满足条件,则变量采用其原始值。我很困惑为什么会出现错误,并且想知道如何修改代码以克服此错误。
例如,假设我有以下数据集x
,并且我想创建一个新变量var3
,这样如果满足条件,var3
则取 1,如果不满足,var3
则取其旧值。
x = data.frame(var1 = c('a', 'b', 'ab'),
var2 = rep(2,3))
x
x %>%
dplyr::mutate(var3 = 0,
var3 = if_else(grep('a', var1)==1, 1, var3))
如果我运行此代码,我会收到以下错误
Error in mutate_impl(.data, dots) :
Column `var3` must be length 3 (the number of rows) or one, not 2
正确答案是
var1 var2 var3
1 a 2 1
2 b 2 0
3 ab 2 1
我的真实代码更复杂,我需要var3
在条件评估时取其旧值FALSE
,而不仅仅是一个奇异值(比如0
)。
我在这里做错了什么?
解决方案
使用 str_detect 回答:
library(tidyverse)
x = data.frame(var1 = c('a', 'b', 'ab'),
var2 = rep(2,3))
x
x %>%
dplyr::mutate(var3 = 0,
var3 = if_else(str_detect(var1,'a'), 1, var3))
推荐阅读
- laravel - Laravel,如何从 dropify 中删除文件?
- javascript - 如何使用js更新html中的数字
- java - 通过功能接口方法签名获取类构造函数
- c# - ASP.NET Core JWT 不记名身份验证与外部 Windows 身份验证的可能性
- c# - 切换开关内容未显示在 DataGrid 中
- c# - 如何从 UInt128 类型中提取字节
- jmeter - 并行 HTTP 请求采样器 - 在运行时附加 URL
- flutter - 试图找出为什么 Flutter GridView 的循环生成项的每个循环索引错误
- swiftui - SwiftUI:TabView 只有在没有绑定的情况下才能正常工作(点不会改变)
- azure - 如何使用 Azure DevOps 工件存储库作为 AzureML 的 DatabricksStep 的源?