gpt4 book ai didi

r - 在R中提取向量中的最后一个序列数

转载 作者:行者123 更新时间:2023-12-04 23:35:40 25 4
gpt4 key购买 nike

这是我的向量:

myvector<-c(1L, 2L, 4L, 5L, 6L, 7L, 8L, 10L, 12L, 142L, 143L, 149L, 150L)

如您所见,此向量中有一些序列:

Seq1: 1,2
Seq2: 4,5,6,7,8
Seq3: 10
Seq4: 12
Seq5: 142,143
Seq6: 149,150

我正在尝试实现一个代码来识别这个序列并提取最后一个。结果应该是:

output<- c(2L, 8L,10L,12L, 143L, 150L)

我还有其他更大的向量。但是如果我能用这个向量做到这一点,我就能用其他向量做到这一点。

我尝试使用 diff 但最后一个元素被删除了。

有什么帮助吗?

最佳答案

我们可以用diffcumsum创建一个分组向量,在tapply中使用它来提取最后一个元素

unname(tapply(myvector, cumsum(c(TRUE, diff(myvector) != 1)), 
FUN = tail, 1))
#[1] 2 8 10 12 143 150

或者另一个简单的选择是

by(myvector, cumsum(c(TRUE, diff(myvector) != 1)), FUN = tail, 1)

或者一个选项是split成一个list,通过循环list

提取最后一个元素
lst1 <- split(myvector, cumsum(c(TRUE, diff(myvector) != 1)),)
unname(sapply(lst1, tail, 1))
#[1] 2 8 10 12 143 150

或在 data.frame/tibble 中创建一个分组列,然后执行常规 slice/filter

library(tidyverse)
tibble(val = myvector, grp = cumsum(c(TRUE, diff(val) != 1))) %>%
group_by(grp) %>%
slice(n()) %>%
pull(val)
#[1] 2 8 10 12 143 150

关于r - 在R中提取向量中的最后一个序列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57640237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com