基于数据帧列使用多个条件进行变异

问题描述 投票:0回答:1

我有这个小标题(交易) 小标题:13×2

  START_DATE CHANNEL_LVL1
   <chr>      <chr>       
 1 NA         Website     
 2 2023-01-31 Website     
 3 NA         WalkIn      
 4 2023-01-31 Marketplace 
 5 NA         Marketplace 
 6 2023-01-31 Marketplace 
 7 2023-01-31 Call Center 
 8 2023-01-31 Marketplace 
 9 2023-01-31 Marketplace 
10 NA         WalkIn      
11 2023-01-31 Website     
12 2023-01-31 Website     
13 2023-01-31 Marketplace 

我想检查每一行

if( (is.na(START_DATE) && CHANNEL_LVL1 =="WalkIn")
。如果这是真的,我想用
NA
替换
date_to_set

我尝试过这个方法

transactions <- transactions %>% 
mutate( 
START_DATE = ifelse(is.na(START_DATE) & CHANNEL_LVL1 == "WalkIn", date_to_set, as.character(START_DATE)
) 

它会产生此错误:

mutate()
错误:!计算时出现问题
START_DATE = ifelse(CHANNEL_LVL1 == "WalkIn" & is.na(START_DATE), date, START_DATE)
。错误原因: !
START_DATE
必须返回跨组兼容的向量。运行
rlang::last_error()
查看错误发生的位置。调用自:signal_abort(cnd, .file)

我也尝试过case_when方法,但无济于事。

任何帮助将不胜感激!

r dplyr mutate
1个回答
0
投票

以下作品:

transactions <- read.table(text="
 START_DATE CHANNEL_LVL1
 1 NA         Website     
 2 2023-01-31 Website     
 3 NA         WalkIn      
 4 2023-01-31 Marketplace 
 5 NA         Marketplace 
 6 2023-01-31 Marketplace 
 7 2023-01-31 'Call Center' 
 8 2023-01-31 Marketplace 
 9 2023-01-31 Marketplace 
10 NA         WalkIn      
11 2023-01-31 Website     
12 2023-01-31 Website     
13 2023-01-31 Marketplace", header=T)

date_to_set <- "2023-01-31"

transactions %>% 
  mutate(START_DATE = ifelse(is.na(START_DATE) & CHANNEL_LVL1 == "WalkIn", date_to_set, as.character(START_DATE))) 

我从你的错误中猜测(“START_DATE必须返回跨组的兼容向量”)是你的数据框在你没有意识到的情况下被分组,或者也许date_to_set是不寻常的东西(你应该包括它)。

© www.soinside.com 2019 - 2024. All rights reserved.