You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R脚本中实现行字符串对比并生成连续计数列的技术问题

R脚本实现行字符串对比生成计数列

需求说明

对比数据框中当前行与前一行的字符串:

  • 若字符串匹配,计数保持不变
  • 若字符串不匹配,计数器加1
    最终生成独立的计数列record_number

示例数据

# 构造示例数据框
knime.in <- data.frame(
  combined_string = c(
    "Error   NIO belt full",
    "Error   NIO belt full",
    "Error   transport - x axis error [70MA1]",
    "Error   loading - lifter hp [341BG4 + 341BG6] not reached",
    "Place   LF - NIO Station6 graph windows 2 out of",
    "Error   loading - scanner not ready",
    "Error   loading - scanner not ready"
  ),
  stringsAsFactors = FALSE
)

原代码问题分析

你提供的代码存在以下问题:

  • 使用lag()函数在循环中错误:lag()会生成整个移位后的向量,无法针对当前行i与前一行i-1做逐行判断
  • 逻辑反转:需求是不匹配时计数器加1,但原代码是匹配时加1
  • 未处理第一行的边界情况:第一行没有前一行,应直接初始化为1

正确实现方法

方法1:循环实现(适合新手理解)

knime.out <- knime.in
n <- nrow(knime.out)
knime.out$record_number <- integer(n)

# 初始化第一行计数
r_num <- 1
knime.out$record_number[1] <- r_num

# 从第二行开始逐行对比
for (i in 2:n) {
  if (knime.out$combined_string[i] != knime.out$combined_string[i-1]) {
    r_num <- r_num + 1
  }
  knime.out$record_number[i] <- r_num
}

方法2:向量化实现(高效推荐)

用dplyr的向量化操作替代循环,效率更高,代码更简洁:

library(dplyr)

knime.out <- knime.in %>%
  mutate(
    # 生成标记:第一行标记为1,后续行与前一行不同则标记为1,否则为0
    diff_flag = c(1, as.integer(combined_string[-1] != combined_string[-n()])),
    # 累加标记得到连续计数
    record_number = cumsum(diff_flag)
  ) %>%
  select(-diff_flag)  # 可选:移除中间辅助列

最终结果

运行后得到的knime.out如下:

combined_string record_number
1                        Error   NIO belt full              1
2                        Error   NIO belt full              1
3        Error   transport - x axis error [70MA1]            2
4 Error   loading - lifter hp [341BG4 + 341BG6] not reached 3
5    Place   LF - NIO Station6 graph windows 2 out of        4
6              Error   loading - scanner not ready          5
7              Error   loading - scanner not ready          5

内容的提问来源于stack exchange,提问作者Enrique Pena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:57:41