【发布时间】:2018-09-07 02:08:40
【问题描述】:
每当上一年的列为 1 时,我想将下面的所有 0 列重新编码为 1。
从这个数据框开始:
library(tibble); library(dplyr)
(df <- tibble(id = c(1,2,3),
`1997` = c(1,0,0),
`1998` = c(0,1,0),
`1999` = c(0,0,1)))
#> # A tibble: 3 x 4
#> id `1997` `1998` `1999`
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 0 0
#> 2 2 0 1 0
#> 3 3 0 0 1
以这个数据框结束:
tibble(id = c(1,2,3),
`1997` = c(1,0,0),
`1998` = c(1,1,0),
`1999` = c(1,1,1))
#> # A tibble: 3 x 4
#> id `1997` `1998` `1999`
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 1 1
#> 2 2 0 1 1
#> 3 3 0 0 1
有没有办法用dplyr 和mutate_at/mutate_if 函数来做到这一点?
我需要一种方法来仅选择年份列,找到值为 1 的最小年份列,并根据该结果改变所有较大的年份列。
# Method that uses dplyr::mutate_at?
# df %>% mutate_at(vars(`1997`:`1999`), funs(replace(., . == 0 & previousColumnVar == 1, 1)))
【问题讨论】: