如何检测一列中的更改并标记另一列中的更改

2023-12-24

我试图标记进程何时开始和结束。 代码需要检测更改何时开始和何时结束,并在另一列中进行标记。

示例数据:

date  process 
2007     0            
2008     1
2009     1
2010     1
2011     1
2012     1
2013     0

Goal:

date  process        Status
2007     0             NA
2008     1        Process_START
2009     1             NA
2010     1             NA
2011     1             NA
2012     1        Process_END
2013     0             NA

也许通过计算diff并在两个方向上滞后:

dif <- diff(df1$process)
df1$Status <- factor(c(NA, dif) - 2 * c(dif, NA), levels = -3:3)
levels(df1$Status) <- c(rep(NA, 4), "Start", "End", "Start&End")
#   date process Status
# 1 2007       0   <NA>
# 2 2008       1  Start
# 3 2009       1   <NA>
# 4 2010       1   <NA>
# 5 2011       1   <NA>
# 6 2012       1    End
# 7 2013       0   <NA>

Update

不带因素的版本:

dif <- diff(df1$process)
df1$Status <- c(NA, dif) - 2 * c(dif, NA)
df1$Status <- c(rep(NA,4), "Start", "End", "Start&End")[df1$Status + 4]

请注意,如果是单年流程,则有“开始和结束”情况。

Update 2

如果系列以 process = 1 开始(或结束),则预期输出可能不是 NA,而是 Start(或 End):

dif <- diff(df1$process)
df1$Status <- c(df1$process[1], dif) - 2 * c(dif, -tail(df1$process,1))
df1$Status <- c(rep(NA,4), "Start", "End", "Start&End")[df1$Status + 4]

更复杂的例子:

set.seed(4)
df1 <- data.frame(date = 2007:(2007+24), process = sample(c(0,1, 1), 25, TRUE))

最后一个版本产生:

#    date process    Status
# 1  2007       1 Start&End
# 2  2008       0      <NA>
# 3  2009       0      <NA>
# 4  2010       0      <NA>
# 5  2011       1 Start&End
# 6  2012       0      <NA>
# 7  2013       1     Start
# 8  2014       1      <NA>
# 9  2015       1       End
# 10 2016       0      <NA>
# 11 2017       1 Start&End
# 12 2018       0      <NA>
# 13 2019       0      <NA>
# 14 2020       1     Start
# 15 2021       1      <NA>
# 16 2022       1      <NA>
# 17 2023       1      <NA>
# 18 2024       1      <NA>
# 19 2025       1      <NA>
# 20 2026       1      <NA>
# 21 2027       1      <NA>
# 22 2028       1      <NA>
# 23 2029       1      <NA>
# 24 2030       1      <NA>
# 25 2031       1       End
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测一列中的更改并标记另一列中的更改 的相关文章

  • 长变量名在 dplyr 中失败

    长度超过 39 个字符的字符串在 dplyr 中失败 返回错误 错误 索引超出范围 我错过了什么还是这是一个错误 40 个字符不起作用 library dplyr names iris 5 lt vvv 5vvv10vvv15vvv20vv
  • 查找嵌套列表中元素的索引?

    我有一个类似的列表 mylist lt list a 1 b list A 1 B 2 c list C 1 D 3 是否有一种 无循环 方法来识别元素的位置 例如如果我想用 5 替换 C 的值 并且在哪里找到元素 C 并不重要 我可以这样
  • 简单的数据框重塑

    我刚刚从长时间的写作中断中回到 R 并且在记住如何重塑数据方面遇到了一些实际问题 我知道我想做的事情很容易 但出于某种原因 我今晚很愚蠢 并且将自己与融化和重塑混淆了 如果有人能快速指出我正确的方向 我将不胜感激 我有一个这样的数据框 pe
  • 有没有办法在 RStudio 中调试 RScript 调用?

    假设我从命令行运行 R 脚本 如下所示 Rscript prog R x y z 我想检查某一行的代码 目前 我无法在 RStudio 中以交互方式调试它 因为我不知道如何传递参数 由于它设计为从命令行运行 因此如何通过命令行 RStudi
  • 如果“testthat”测试在“R”中失败,则打印自定义诊断信息

    I use a testthat单元测试来检查是否data frame函数返回的结果与我期望它返回的结果相同 如果测试失败 testthat打印一些诊断信息 例如 MyFunction df orig is not identical to
  • 如何调整ggplot直方图的时间刻度轴

    我正在使用一个数据框 其中一列包含POSIXct日期时间值 我正在尝试使用绘制这些时间戳的直方图ggplot2但我有两个问题 我不知道如何设置 binwidthgeom histogram 我想将每个垃圾箱设置为一天或一周 我尝试提供 di
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • 使用 R 的 flextable 包时,有没有办法将传递给 add_header_lines() 的字符串部分加粗

    我正在使用我喜欢的 flextable 包为 Word 文档创建几个表格 但是 我在将表格标题中的部分文本加粗时遇到了一些麻烦 例如 我希望标题为 Table 1 我的表格标题的其余部分 而不是 表 1 我的表格标题的其余部分 I 找到这个
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • 如何更新条件公式?

    让我直接进入示例 考虑以下等式 frml lt formula y a b x z 使用这样的公式规范 例如和AER ivreg 我想更新这个公式 使其显示为 frml2 lt y a b c x z w 但是 我不确定如何更新条件标志之前
  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 将 VLMC 拟合到很长的序列

    我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集 我这样做如下所示 Load libraries library PST library RCurl library TraMineR Load and transform d
  • 使用 R 进行项目组织 [重复]

    这个问题在这里已经有答案了 可能的重复 统计分析和报告撰写的工作流程 https stackoverflow com questions 1429907 workflow for statistical analysis and repor
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • 使用 dplyr::filter 的整洁方式是什么?

    使用下面的函数调用foo c b 输出以内联方式显示 正确的写作方式是什么df gt filter x gt x 我已经包含了一个使用的示例mutate以整洁的风格与之对比filter foo lt function variables x
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY
  • 替换字符串/文本中“从第 n 次到最后一次”出现的单词

    这个问题以前曾被问过 但尚未得到令提问者满意的答案 https stackoverflow com questions 36368712 how to use stringrs replace all function to replace
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以

随机推荐