【发布时间】:2021-12-10 17:19:31
【问题描述】:
在 tibble 中,我希望能够更正变量 nbeta_dep01、nbeta_dep02 所采用的某些值 ...
下面是我正在做的一个可重现的例子。
我想知道是否有办法缩短语法(因为在我的示例中,我复制并粘贴了与变量 nbeta_depXX 一样多次的更正指令)
suppressMessages(library(dplyr))
test <- tribble(
~ent, ~dep_impl, ~nbeta_dep01, ~nbeta_dep02, ~nbeta_dep03, ~nbeta_dep04, ~nbeta_dep05,
"a", "01", 0, 0, 0, 0, 0,
"b", "03", 2, 0, 3, 0, 1,
"c", "05", 0, 0, 0, 1, 0,
"d", "02", 0, 0, 0, 0, 0
)
test %>%
rowwise() %>%
mutate(
nbeta_dep01 = ifelse(
nbeta_dep01==0 & nbeta_dep02==0 & nbeta_dep03==0 & nbeta_dep04==0 & nbeta_dep05==0 & dep_impl=="01",
1,
nbeta_dep01),
nbeta_dep02 = ifelse(
nbeta_dep01==0 & nbeta_dep02==0 & nbeta_dep03==0 & nbeta_dep04==0 & nbeta_dep05==0 & dep_impl=="02",
1,
nbeta_dep02),
nbeta_dep03 = ifelse(
nbeta_dep01==0 & nbeta_dep02==0 & nbeta_dep03==0 & nbeta_dep04==0 & nbeta_dep05==0 & dep_impl=="03",
1,
nbeta_dep03),
nbeta_dep04 = ifelse(
nbeta_dep04==0 & nbeta_dep02==0 & nbeta_dep03==0 & nbeta_dep04==0 & nbeta_dep05==0 & dep_impl=="04",
1,
nbeta_dep04),
)
#> # A tibble: 4 x 7
#> # Rowwise:
#> ent dep_impl nbeta_dep01 nbeta_dep02 nbeta_dep03 nbeta_dep04 nbeta_dep05
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 a 01 1 0 0 0 0
#> 2 b 03 2 0 3 0 1
#> 3 c 05 0 0 0 1 0
#> 4 d 02 0 1 0 0 0
Created on 2021-10-25 by the reprex package (v2.0.1)
【问题讨论】:
-
我没有检查逻辑是否通常可以简化,但您可能想要检查
case_when,而不是多个 ifelse 命令。