Это то, что вы ищете? В этом контексте TRUE
в основном похоже на оператор ELSE
. Я уверен, что вы можете сделать что-то подобное, если бы еще, но результаты те же.
df <- structure(list(year = c(
1990L, 1991L, 1992L, 1993L, 1990L, 1991L,
1992L, 1993L
), fuel = structure(c(
1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L
), .Label = c("a", "b"), class = "factor"), stock = c(
10, 11,
NA, NA, 10, 11, NA, NA
), sales = c(
NA, 1, NA, NA, NA, 1, NA,
NA
), formation = c(0.3, 0.4, 0.5, 0.3, 0.7, 0.4, 0.5, 0.7)), class = c(
"grouped_df",
"tbl_df", "tbl", "data.frame"
), row.names = c(NA, -8L), vars = "fuel", labels = structure(list(
fuel = structure(1:2, .Label = c("a", "b"), class = "factor")
), class = "data.frame", row.names = c(
NA,
-2L
), vars = "fuel", drop = TRUE), indices = list(0:3, 4:7), drop = TRUE, group_sizes = c(
4L,
4L
), biggest_group_size = 4L)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
cat("Before")
#> Before
print(df)
#> # A tibble: 8 x 5
#> # Groups: fuel [2]
#> year fuel stock sales formation
#> <int> <fct> <dbl> <dbl> <dbl>
#> 1 1990 a 10 NA 0.3
#> 2 1991 a 11 1 0.4
#> 3 1992 a NA NA 0.5
#> 4 1993 a NA NA 0.3
#> 5 1990 b 10 NA 0.7
#> 6 1991 b 11 1 0.4
#> 7 1992 b NA NA 0.5
#> 8 1993 b NA NA 0.7
df <- df %>%
mutate(
stock = case_when(
year == 1991 ~ stock,
TRUE ~ lag(stock) + formation + lag(sales)
),
sales = case_when(
year == 1991 ~ sales,
TRUE ~ stock - lag(stock)
)
)
cat("After")
#> After
print(df)
#> # A tibble: 8 x 5
#> # Groups: fuel [2]
#> year fuel stock sales formation
#> <int> <fct> <dbl> <dbl> <dbl>
#> 1 1990 a NA NA 0.3
#> 2 1991 a 11 1 0.4
#> 3 1992 a 12.5 1.5 0.5
#> 4 1993 a NA NA 0.3
#> 5 1990 b NA NA 0.7
#> 6 1991 b 11 1 0.4
#> 7 1992 b 12.5 1.5 0.5
#> 8 1993 b NA NA 0.7
Создано в 2019-01-04 пакетом Представить (v0.2.1)