我可以在左侧(LHS)中使用值的位置出现dplyr::case_when()
吗?
在这个例子中的数据,我想创建y
这样它仅包含最后一次出现"A"
在x
与第一次出现"B"
的x
。
library(dplyr)
# Data
df <- tibble(
x = c(NA, "A", "A", NA, NA, "B", "B"))
df
#> # A tibble: 7 x 1
#> x
#> <chr>
#> 1 <NA>
#> 2 A
#> 3 A
#> 4 <NA>
#> 5 <NA>
#> 6 B
#> 7 B
tibble(
x = c(NA, "A", "A", NA, NA, "B", "B"),
y = c(NA, NA, "A", NA, NA, "B", NA))
#> # A tibble: 7 x 2
#> x y
#> <chr> <chr>
#> 1 <NA> <NA>
#> 2 A <NA>
#> 3 A A
#> 4 <NA> <NA>
#> 5 <NA> <NA>
#> 6 B B
#> 7 B <NA>
df %>%
mutate(
y = case_when(
x == last(x == "A") ~ "A",
x == first(x == "B") ~ "B")
)
#> # A tibble: 7 x 2
#> x y
#> <chr> <chr>
#> 1 <NA> <NA>
#> 2 A <NA>
#> 3 A <NA>
#> 4 <NA> <NA>
#> 5 <NA> <NA>
#> 6 B <NA>
#> 7 B <NA>
由reprex软件包(v0.3.0)创建于2019-11-28
我们需要这个位置
library(dplyr)
df %>%
mutate(y = replace(x, first(which(x %in% "A")), NA),
y = replace(y, last(which(x %in% "B")), NA))
# A tibble: 7 x 2
# x y
# <chr> <chr>
#1 <NA> <NA>
#2 A <NA>
#3 A A
#4 <NA> <NA>
#5 <NA> <NA>
#6 B B
#7 B <NA>
或用于match
获取索引
df %>%
mutate(y = replace(x, c(match("A", x), n() +1 - match("B", rev(x))), NA))
或使用 case_when
df %>%
mutate(y = case_when((duplicated(x == "A", fromLast = TRUE) &
x %in% "A") |(duplicated(x == "B") & x %in% "B") ~ NA_character_,
TRUE ~ x))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句