我希望能够识别向量中所有唯一的值以及多个值的最后出现实例。例如,我希望能够确定位置。
c(2,3,4,6,7)
在向量中:
v <- c("m", "m", "k", "r", "l", "o", "l")
我看到
(duplicated(v) | duplicated(v, fromLast = T))
此代码可以识别所有重复值,但我只想识别每个重复元素中最后一个出现的实例。
如何在不使用循环的情况下实现?
我希望能够识别向量中所有唯一的值以及多个值的最后出现实例。例如,我希望能够确定位置。
c(2,3,4,6,7)
在向量中:
v <- c("m", "m", "k", "r", "l", "o", "l")
我看到
(duplicated(v) | duplicated(v, fromLast = T))
此代码可以识别所有重复值,但我只想识别每个重复元素中最后一个出现的实例。
如何在不使用循环的情况下实现?
您需要:
duplicated(v)
[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
# and for index
which(duplicated(v))
[1] 2 7
which(!duplicated(v, fromLast = TRUE))
[1] 2 3 4 6 7
fromLast
选项 :P - ThomasIsCoding您可以采取以下方法:
library(dplyr)
v %>%
as_tibble() %>%
mutate(index = row_number()) %>%
group_by(value) %>%
mutate(id=row_number()) %>%
filter(id == max(id))
# A tibble: 5 × 3
# Groups: value [5]
value index id
<chr> <int> <int>
1 m 2 2
2 k 3 1
3 r 4 1
4 o 6 1
5 l 7 2
此外,如果您只想获取索引,可以执行以下操作:
v %>%
as_tibble() %>%
mutate(index = row_number()) %>%
group_by(value) %>%
mutate(id=row_number()) %>%
filter(id == max(id)) %>%
pull(index)
...要获取:
[1] 2 3 4 6 7
> sort(tapply(seq_along(v), v, max))
m k r o l
2 3 4 6 7
或者
> unique(ave(seq_along(v), v, FUN = max))
[1] 2 3 4 7 6
或者
> rev(length(v) - which(!duplicated(rev(v))) + 1)
[1] 2 3 4 6 7