我有一个看起来像这样的数据框:
cnpj | 时间2 | n_act_contracts |
---|---|---|
12 | -1 | 10 |
12 | 0 | 8 |
12 | 1 | 6 |
13 | -1 | 3 |
13 | 0 | 5 |
13 | 1 | 7 |
14 | 1 | 3 |
14 | 2 | 5 |
14 | 3 | 7 |
15 | 不适用 | 3 |
15 | 不适用 | 5 |
15 | 不适用 | 7 |
我想定义另一个变量,对于所有具有相同 cnpj 的观察,当变量 time2 等于 0 时,n_act_contracts 的值。
cnpj | 时间2 | n_act_contracts | zero_n_act_contracts |
---|---|---|---|
12 | -1 | 10 | 8 |
12 | 0 | 8 | 8 |
12 | 1 | 6 | 8 |
13 | -1 | 3 | 5 |
13 | 0 | 5 | 5 |
13 | 1 | 7 | 5 |
14 | 1 | 3 | 不适用 |
14 | 2 | 5 | 不适用 |
14 | 3 | 7 | 不适用 |
15 | 不适用 | 3 | 不适用 |
15 | 不适用 | 5 | 不适用 |
15 | 不适用 | 7 | 不适用 |
我一直在使用以下代码行来做这件事,但我需要让它更有效率。
data <- data %>%
group_by(cnpj) %>%
mutate(
zero_n_act_contracts = ifelse(time2 == 0,n_act_contracts,-1000),
zero_n_act_contracts = max(zero_n_act_contracts, na.rm = TRUE),
zero_n_act_contracts = ifelse(zero_n_act_contracts == -1000,NA,zero_n_act_contracts))
obs:我已经尝试用 dplyr: "if_else" 替换 base "ifelse",但是我的代码运行时间更长。