首页 > 解决方案 > 有没有一种简单的方法可以通过值块将 R 中的重复值向量分开并获取索引?

问题描述

我有一个横断面数据的数据框,这样对于每个横断面,都有物种代码,对于每个物种,都有一个相关的计数。我试图通过将数据框分成每个样带来计算识别特定物种的样带的比例。如何获取重复数字块的向量,将其用相同值的块分隔,并获取索引?

例子:

x <- c(1, 2, 1, 2, 3, 1)
y <- c(3, 2, 3, 3, 2, 3)
Transects <- rep(x, y)

我希望它输出像这样的块

c(1, 1, 1)
c(2, 2)
c(1, 1, 1)
c(2, 2, 2)
c(3, 3)
c(1, 1, 1)

或更重要的是,相关的索引,这会给我

c(1, 2, 3)
c(4, 5)
c(6, 7, 8)
c(9, 10, 11)
c(12, 13)
c(14, 15, 16) 

我什至不知道要尝试什么函数,因为我不知道将向量分开的索引,也不能用简单的值分开,因为有相同值的块,我不希望它们混合在一起,因为它们是不同的横断面。感谢任何帮助,我什至不知道如何构建一个可以做到这一点的函数。

标签: rvectorindices

解决方案


你可以做:

split(Transects, with(rle(Transects), rep(seq_along(values), lengths)))

$`1`
[1] 1 1 1

$`2`
[1] 2 2

$`3`
[1] 1 1 1

$`4`
[1] 2 2 2

$`5`
[1] 3 3

$`6`
[1] 1 1 1

或者如果对索引感兴趣:

split(seq_along(Transects), with(rle(Transects), rep(seq_along(values), lengths)))

$`1`
[1] 1 2 3

$`2`
[1] 4 5

$`3`
[1] 6 7 8

$`4`
[1]  9 10 11

$`5`
[1] 12 13

$`6`
[1] 14 15 16

或者,您可以执行以下操作:

split(Transects, cumsum(c(0, diff(Transects)) != 0))

推荐阅读