使用 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.table
、fifelse
library(data.table)
setDT(df)[, time := fifelse(!exposure, time - 30, time)]
我正在尝试在 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.table
、fifelse
library(data.table)
setDT(df)[, time := fifelse(!exposure, time - 30, time)]