使用 case_when 替换 r 中的值

Replace values in r using case_when

我正在尝试在 r 中复制一些 Stata 代码。在我的 df 中,有一个变量“time”和一个“exposure”(都是数字,所以值如 1,2,3 等

这是原始 Stata 代码的样子:

replace time = (time - 31) if exposure == 0

这就是我尝试过的:

recoded_df <- recoded_df %>% mutate(time = case_when(exposure == 0 ~ (time - 31))

我收到代码中存在“意外符号”的错误。但是我不知道我做错了什么。

如果我没理解错的话,ifelse 来自 base R 应该包括这个:

recoded_df$time = ifelse(recoded_df$exposure == 0,
                         recoded_df$time - 31, recoded_df$time)
library(dplyr)

df <- data.frame(
  exposure = c(0, 1),
  time = c(81, 20)
)

df %>%
  mutate(
    time = case_when(exposure == 0 ~ time - 30,
                     TRUE ~ time)
  )

  exposure time
1        0   51
2        1   20

您可以通过以下两种方式使用虚假数据框完成任务:

# fake dataframe:
df <- tribble(
  ~time, ~exposure,
  100, 0,
 70, 1, 
  90, 0, 
  60, 1, 
  50, 0
)

# 1. with mutate and ifelse
library(dplyr)
df %>% 
  mutate(time = ifelse(exposure == 0, time-31, time))

# 2. with base R and ifelse
df$time <- ifelse(df$exposure == 0, df$time - 31, df$time) 

使用 data.tablefifelse

library(data.table)
setDT(df)[, time := fifelse(!exposure, time - 30,  time)]