r - 有没有一种简单的方法可以通过值块将 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)
我什至不知道要尝试什么函数,因为我不知道将向量分开的索引,也不能用简单的值分开,因为有相同值的块,我不希望它们混合在一起,因为它们是不同的横断面。感谢任何帮助,我什至不知道如何构建一个可以做到这一点的函数。
解决方案
你可以做:
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))
推荐阅读
- python - 如何在熊猫系列条形图上设置误差线上限
- firebase - Firebase 身份验证持久性
- javascript - 如何使用打字稿修改对象数组(原始形式为新形式)
- ios - 在 SwiftUI 中创建项目后,我们可以将根视图控制器更改为 Storybord 吗?
- haskell - 派生 MonadThrow、MonadCatch、MonadBaseControl、MonadUnliftIO 等是否安全?
- c# - 多列分组和求和
- java - 无法读取名称为 [xx] 在命名空间 ['default'] 中的 configmap
- graphql - 为什么我的查询没有返回枚举数组
- apache-spark - 找不到缺课的罐子
- sql - SR0004 - 没有用作 IN 谓词测试表达式的索引的列可能会降低性能