无需 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 循环即可标记连续的观察块 的相关文章

  • 在函数内部调用 clusterApply 时,性能会下降

    我遇到了一个奇怪的问题clusterApply 我已经能够尽可能地隔离它 如下所示 首先 我从全局环境运行以下代码 require parallel cl lt makeCluster rep localhost 20 SOCK xl lt
  • 如何更新条件公式?

    让我直接进入示例 考虑以下等式 frml lt formula y a b x z 使用这样的公式规范 例如和AER ivreg 我想更新这个公式 使其显示为 frml2 lt y a b c x z w 但是 我不确定如何更新条件标志之前
  • dplyr,do(),从模型中提取参数而不丢失分组变量

    R 帮助中关于 do 的示例略有不同 by cyl lt group by mtcars cyl models lt by cyl gt do mod lm mpg disp data coefficients lt models gt d
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 将 sf voronoi 多边形裁剪到边界框时出错

    我正在尝试将 voronoi polygons 使用 sf package 创建 剪辑 到边界框 但它引发了我无法定义的错误 我对 R 的空间世界不太有经验 感谢所有帮助 样本数据 stations lt structure list ST
  • R 更改小数位且不四舍五入

    gt signif 1 89 digits 2 1 1 9 我想要1 8 这有点笨拙 但它会起作用并保持所有数字 x lt 1 829380 trunc dec lt function x n floor x 10 n 10 n Resul
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 使用outer代替expand.grid

    我正在寻找尽可能快的速度并留在基地做该做的事expand grid做 我用过outer为过去类似的目的创建一个向量 像这样的东西 v lt outer letters LETTERS paste0 unlist v lower tri v
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 使用predictNLS围绕R中的拟合值创建置信区间?

    我想使用 R 中 propogate 包中的 PredictNLS 围绕一大组拟合值构建置信区间 作为示例 我将使用它们在函数描述中引用的数据集 https rdrr io github anspiess propagate man pre
  • 如何将 ggrough 图表另存为 .png

    说我正在使用R包裹ggrough https xvrdm github io ggrough https xvrdm github io ggrough 我有这个代码 取自该网页 library ggplot2 library ggroug
  • 从“parallel”包中的非基础 R 包调用函数,而无需在函数中将它们库化

    假设我正在尝试运行以下代码 library gregmisc library parallel myfunction lt function x combinations 10 x 1 10 cl lt makeCluster getOpt
  • 如何在我自己的网络服务器上导出并托管 ggvis 图表?

    据我了解 ggvis 运行在闪亮的之上 但我不知道如何在没有 R shiny 的情况下导出在网络服务器上运行单个 ggvis 图表所需的所有文件 这对于交互式绘图来说是不可能的 因为 每个交互式 ggvis 图都必须连接到正在运行的 R 会
  • ggplot2 可视化/显示中的地图错误?

    正如您在下面看到的 我使用 ggplots 制作的地图上存在一个奇怪的显示问题 任何投影似乎都会发生同样的问题 这是代码 仅包maps and ggplot2需要 mapWorld lt borders world colour gray5
  • 在 R 中使用 nls 重新创建研究

    我正在学习如何在 R 中使用 nls 函数 但遇到了一些问题 我现在只是试图重新创建研究论文中发现的曲线 该模型拟合了 1987 年崩盘前股市走势的曲线 我定义了一个函数func 如下 func lt function a b tc t a
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988
  • 基于条件反应逻辑闪亮的 Flexdashboard

    我正在尝试有条件地进行一种类型的渲染 renderPlot 或其他 renderText 基于一些输入 这是我尝试过的 title Citation Extraction output flexdashboard flex dashboar
  • 如何一次导入多个 .csv 文件?

    假设我们有一个包含多个 data csv 文件的文件夹 每个文件包含相同数量的变量 但每个文件来自不同的时间 R 中有没有办法同时导入它们 而不必单独导入它们 我的问题是 我有大约 2000 个数据文件需要导入 并且必须使用以下代码单独导入
  • 使用 purrr、broom 从许多单变量模型中获得整洁的输出

    我有一个由二进制结果列组成的数据框 y 和多个独立的预测列 x1 x2 x3 我想运行许多单变量逻辑回归模型 例如y x1 y x2 y x3 并将每个模型的指数系数 比值比 95 置信区间和 p 值提取到数据框 标题的行中 在我看来 使用

随机推荐

  • 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