无需 for 循环即可标记连续的观察块

2024-01-01

我有一个标准的“我可以避免循环”问题,但找不到解决方案。

我回答了这个问题由@splaisan提出 https://stackoverflow.com/questions/10532192/add-segments-to-scatter-plot/10559398#10559398但我不得不在中间部分诉诸一些丑陋的扭曲,for和多个if测试。我在这里模拟了一个更简单的版本,希望有人能给出更好的答案......

问题

给定这样的数据结构:

df <- read.table(text = 'type
a
a
a
b
b
c
c
c
c
d
e', header = TRUE)

我想识别相同类型的连续块并将它们分组。第一个块应标记为 0,下一个块应标记为 1,依此类推。块的数量是无限的,并且每个块可能短到只有一个成员。

type    label
   a    0
   a    0
   a    0
   b    1
   b    1
   c    2
   c    2
   c    2
   c    2
   d    3
   e    4

我的解决方案

我不得不求助于for循环执行此操作,代码如下:

label <- 0
df$label <- label

# LOOP through the label column and increment the label
# whenever a new type is found
for (i in 2:length(df$type)) {
    if (df$type[i-1] != df$type[i]) { label <- label + 1 }
    df$label[i] <- label
}

我的问题

任何人都可以在没有循环和条件的情况下做到这一点吗?


Using rle

r <- rle(as.numeric(df$type))
df$label <- rep(seq(from=0, length=length(r$lengths)), times=r$lengths)

不使用rle, but cumsum超过强制为数字的逻辑。

df$label <- c(0,cumsum(df$type[-1] != df$type[-length(df$type)]))

两者都给出:

> df
   type label
1     a     0
2     a     0
3     a     0
4     b     1
5     b     1
6     c     2
7     c     2
8     c     2
9     c     2
10    d     3
11    e     4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无需 for 循环即可标记连续的观察块 的相关文章

  • 如何很好地注释 ggplot2(手册)

    Using ggplot2我通常使用geom text和类似的东西position jitter注释我的情节 然而 对于一个漂亮的情节 我经常发现手动注释是值得的 像下面这样 data2 lt structure list type str
  • magrittr 管道中的 WOE

    如何将下面的证据代码权重放入 magrittr 管道中 df gt 我尝试过的一切似乎都不起作用 df library Information library magrittr df a c aa bb cc aa aa aa bb cc
  • 在R中使用plotly在轴标题中换行和下标

    我刚开始使用plotly对于 R 中的一些交互式散点图 并且在轴标签上遇到困难 通常我设计我的情节ggplot2然后使用ggplotly函数来转换它们 但这有时由于某种原因非常慢 所以我想直接在中创建我的图plotly 我现在尝试更改轴标题
  • 有什么方法可以访问 makeActiveBinding 安装的函数吗?

    标题基本上说明了一切 如果我这样做 makeActiveBinding x function runif 2 GlobalEnv x 1 0 7332872 0 4707796 x 1 0 5500310 0 5013099 那我有什么办法
  • 闪亮的本地部署错误:输入字符串 1 无效 UTF-8

    我很惊讶地发现一个突然的错误 我的 ShinyApp 停止工作并出现未知错误 提示 输入字符串 1 无效 UTF 8 即使在昨天 该应用程序也可以正常运行 但是突然停止了 下面是我运行时的错误描述runApp gt runApp Liste
  • 根据R中的特定行值将数据帧拆分为多个数据帧

    我需要根据数据帧中重复出现的标题行将数据帧拆分为 17 872 个数据帧 我需要将新创建的数据框存储在列表中 我的数据框看起来像 0 1 2 32 Alert Type Response 33 w1 x1 y1
  • 列值的切换功能

    我有一个缩写变量 名称错误地分散在整个列表中 请参阅下面的示例结构 ID lt c SPW SM DLS SJ joe schmoe CEJ teddy roos GVF MJC LH sally fields Full names sho
  • 重叠并固定小平面中的 x 尺度(尺度=“自由”)以制作电影

    在另一篇文章中 Justin 的帮助下 我用以下方法绘制了模拟结果facet gridggplot2 中的选项 包含数据和答案的帖子在这里 使用facet grid选项通过ggplot2绘制数据框的列 https stackoverflow
  • 如何合并具有相同列名的数据框

    我有一个数据框 如下所示 structure list Variables structure list ADA ADA LEAD LEAD BIG4 BIG4 LOGMKT LOGMKT LEV LEV ROA ROA ROAL ROAL
  • R:几个单独图的重新排序因子水平

    我正在尝试从同一个 data frame 创建多个单独的图 每个图的 y 轴上的因子水平顺序不同 每个图都应该对 y 上的因子水平进行递减排序 我知道这可以为每个图手动完成 但我正在寻找一种更有效和更优雅的方法 因为我需要创建相当多的图 这
  • 在函数中调用其他列的控制流程

    我正在尝试在给定条件的情况下连接到函数中的其他列 本质上 我想让数据框在给定条件的情况下从长到宽 其中一列中的这些值是NA相对于同一行中具有值的另一列 转动NAs转化为特定的数字 尽管分配的值必须是特定于列的 因此 如果2010 has N
  • 将数据框中的 1 列拆分为 2 列 [重复]

    这个问题在这里已经有答案了 这是我的数据框 gt data Manufacturers 1 Audi RS5 2 BMW M3 3 Cadillac CTS V 4 Lexus ISF 所以我想将制造商和型号分开 就像这样 gt data
  • R data.table:在当前测量之前对出现次数进行计数

    我有一组在几天内进行的测量结果 测量次数通常为 4 任何测量中可以捕获的数字范围为 1 5 在现实生活中 给定测试集 范围可能高达 100 或低至 20 我想每天计算每个值在当天之前发生的次数 让我用一些示例数据来解释 test data
  • rle 命令帮助

    我在使用 rle 命令时遇到了一些麻烦 该命令旨在找到参与者连续达到 8 个连续参与者的点 例如 如果 x lt c 0 1 0 1 1 1 1 1 1 1 1 1 我想返回值 11 感谢 DWin 我一直在使用这段代码 which rle
  • R - 对矩阵的每行/列应用具有不同参数值的函数

    我试图将函数应用于矩阵的每一行或每一列 但我需要为每一行传递不同的参数值 我以为我熟悉 lapply mapply 等 但可能还不够 举个简单的例子 gt a lt matrix 1 100 ncol 10 gt a 1 2 3 4 5 6
  • 使用 R 中“rpart”包中的生存树来预测新的观察结果

    我正在尝试使用 R 中的 rpart 包来构建生存树 并且我希望使用这棵树来对其他观察结果进行预测 我知道有很多涉及 rpart 和预测的问题 但是 我还没有找到任何解决 我认为 特定于将 rpart 与 Surv 对象一起使用的问题的方法
  • 寻找一种有效的方法来计算两个表中间隔集之间的重叠数量?

    注意 为了方便起见 我使用上一篇文章中的示例数据集 假设有两个数据集 ref and map 他们是 ref lt data table space rep nI 3 t1 c 100 300 500 t2 c 150 400 600 id
  • 按元素名称组合/合并列表

    我有两个列表 其元素的名称部分重叠 我需要将其逐个元素合并 组合成一个列表 gt lst1 lt list integers c 1 7 letters letters 1 5 words c two strings gt lst2 lt
  • 如何更改 R Markdown HTML 文档中目录的颜色和属性?

    我花了很多时间谷歌搜索这个 但似乎无法弄清楚 我正在使用 R Markdown 制作 HTML 文档 文档在这里 http rmarkdown rstudio com html document format html http rmark
  • Dplyr select_ 和starts_with 对变量列表中的多个值进行选择

    我正在从不同位置的不同传感器收集数据 数据输出类似于 df lt data frame date c 2011 2012 2013 2014 2015 Sensor1 Temp c 15 18 15 14 19 Sensor1 Pressu

随机推荐

  • Moose 结构类型

    我想在 Moose 中创建一个结构化类型 可以用作另一个 Moose 属性的类型 例如 我希望能够创建一个name有自己的属性value and error属性 因此 我想知道实现这一目标的最佳方法 我通过定义一个简单的 Moose 类来表
  • 将给定的十进制数转换为二进制数并计算连续的 1 并显示

    问题 将给定的十进制数转换为二进制数并统计连续的1并显示 示例案例1 5的二进制表示为101 因此连续1的最大数量为1 示例案例2 13 的二进制表示为 1101 因此连续 1 的最大数量为 2 解决方案 bin python3 impor
  • 为什么将 1 添加到 byte.MaxValue 会导致 256 而不是溢出[重复]

    这个问题在这里已经有答案了 我在 C 中有一段简单的代码 用于在向类型的 MaxValue 添加 1 时显示溢出错误 using System using System Collections Generic using System Li
  • dart 控制台应用程序中的 Ctrl+c

    Is there a way to catch CTRL C in dart console application For example press CTRL C to send clean closing packet to web
  • Ansible 循环遍历模板中的字母范围

    我正在尝试生成一个 Ansible 模板 该模板按字母顺序而不是数字顺序递增 有没有类似的功能range x 那可以帮助我吗 伪代码示例 for letter in range a d letter endfor 预期产出 a b c d
  • Prolog if 语句

    我正在尝试实现一个按如下方式工作的谓词 pred do this always if statement do this only when if statement is true do this also always independ
  • 设计数据仓库时使用临时数据库的好处

    我正在设计数据仓库架构 在探索从生产中提取数据并将其放入数据仓库的各种选项时 我遇到了许多文章 主要建议以下两种方法 生产数据库 gt 数据仓库 星型模式 gt OLAP立方体 生产数据库 gt 暂存数据库 gt 数据仓库 星型模式 gt
  • ViewChild 返回“未定义”-Angular2

    我试图通过按父组件上的按钮来执行子组件的功能 但由于某种原因它未定义 Parent com1 html
  • 如何查看Spark使用的核心数?

    I have spark cores max set to 24 3 个工作节点 但是如果我进入我的工作节点并看到只有一个进程 command Java 正在运行 该进程会消耗内存和 CPU 我怀疑它没有使用全部 8 个核心 在m2 4x
  • uiimageview isanimating 的替代方案

    我有一个代码在 UIImageView isAnimating 为 false 后执行一些操作 但有趣的是它永远不会出错 它总是处于 是 状态 iPhone 的 UIImageView isAnimating 返回错误 https stac
  • 如何在android MVP中应用组合?

    最近我接手了一个基于 MVP 构建的 android 项目 虽然简单的屏幕非常简单且易于阅读和维护 但应用程序的更复杂的部分却不然 多个继承级别导致我在类之间切换数天 试图找出信息流实际上是如何工作的 以下是问题较多的层次结构的一个示例 既
  • 嗅探 LPT 流量

    我需要拦截 LPT 输出流量 经过几个小时的研究 我开始明白 做到这一点的唯一方法是编写内核模式驱动程序 更准确地说是 过滤驱动程序 我已经下载了 WDK 但是术语和大量的驱动程序类型有点让人不知所措 我基本上是想了解什么kind我应该写的
  • 可移植 SQL 来确定表是否存在?

    是否有一种可移植的方法来确定数据库表是否已存在 便携的 我不这么认为 也许你能得到的最接近的是 select from table 如果表不存在 这将返回错误 table
  • 如何将 ubyte[] 解码为指定的编码?

    问题是 在运行时设置编码时如何解析文件 编码可以是 utf 8 utf 16 latin1 or other 目标是将 ubyte 从所选编码转换为字符串 因为当您使用 std stdio File byChunk 或 std mmFile
  • 如何使用nestjs redis微服务?

    我正在学习nestjs微服务 我可以使用什么命令 const pattern cmd get this client send
  • SendMessage 总是返回零?

    为什么即使消息发送成功 Windows SendMessage 也总是返回 0 是否有办法使用 SendMessage 检查消息传递失败 EDIT 忘了提及我在 C DLL 中使用 SendMessage LRESULT result Se
  • 如何正则表达式匹配对内的对

    我的问题相当简单 即使它的目的相当复杂 我将使用一个简单的例子 AzzAyyAxxxxByyBzzB 所以通常我想要得到之间的一切A and B 然而 由于第一个之间的一些内容A和最后一个B 一对 包含额外的AB对我需要推迟比赛的结束 不确
  • 过滤 xarray 中数据的简洁方法

    我需要对 xarray 数组中的值应用一个非常简单的 匹配语句 当值 gt 0 时 取 2 当值 0 时 设为 0 值在哪里NaN make NaN 这是我当前的解决方案 我在用着NaNs fillna 类型强制代替二维索引 valid d
  • 我的 Kubernetes Pod 可以增长到多少 RAM?

    我想知道 RAM 的当前限制 没有明确配置限制 请求 如何查看现有 Pod 的当前配置 编辑 该配置不仅包括现在使用的内存量 还包括最大限制 即关闭内存的点 如果我用巨大的字符串炸毁堆 我会看到大约 4 GB 的限制 并且 Google C
  • 无需 for 循环即可标记连续的观察块

    我有一个标准的 我可以避免循环 问题 但找不到解决方案 我回答了这个问题由 splaisan提出 https stackoverflow com questions 10532192 add segments to scatter plot