r - 仅当它们是连续的时,我如何才能反转向量中的数字?

标签 r vector reverse sequential

所以,如果输入是一个向量,例如

v <- (1, 2, 3, 7, 2, 8, 9) 

输出将是
(3, 2, 1, 7, 2, 9, 8)

我尝试使用嵌套的 for 和 if 循环,条件为 is.sorted功能,但没有任何成功。

最佳答案

随着样本数据

x <- c(1, 2, 3, 7, 2, 8, 9)

您可以使用以下命令划分为“顺序组”
grp <- cumsum(!c(TRUE, diff(x)==1))
grp
# [1] 0 0 0 1 2 3 3

基本上,我们查看与前一个元素的差异,并在该值不等于 1 的任何时候跟踪更改。

您可以使用此组信息通过 ave 对这些值重新排序。 (这会进行组内转换)。
revsort<-function(...) sort(...,decreasing=TRUE)
ave(x, grp, FUN=revsort)
# [1] 3 2 1 7 2 9 8

关于r - 仅当它们是连续的时,我如何才能反转向量中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056329/

相关文章:

c++ - 如何根据对象的某些字段在 C++ 中的对象 vector 中获取最小或最大元素?

java - 使用 JSCH Java 反向 SSH 隧道

haskell - Haskell 中的反向函数行为

r - 将函数参数传递给公式

mysql - R 和 SQL 查询一起格式

C++在函数内分配动态数组

OpenCV 向量到 Mat 但不是 element->row

django - django模型的假反向关系

Jupyter IRKernel 中的 readline()

r rowSums in case_when