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

如何在R中实现周度数据模式匹配并生成Unidentified关联Match列

在R中生成周度数据的Match标记列

核心需求

根据Data列的核心字符串(移除Unidentified后缀),判断当前行所在周的过去或未来是否存在对应核心字符串的Unidentified行,存在则标记Match=1,否则为0。

实现步骤

我们使用dplyr包完成数据处理,步骤如下:

  1. 提取每个Data条目对应的核心字符串(去掉 Unidentified后缀)。
  2. 按核心字符串分组,记录该组所有Unidentified行的周数。
  3. 对每一行,检查当前周是否有过去或未来的Unidentified行,生成标记。

代码实现

# 加载所需包
library(dplyr)

# 构建示例数据
df <- data.frame(
  Week = 1:16,
  Data = c(
    "Red", "Blue Unidentified", "Blue", "Blue", "Green", "Yellow",
    "Green", "Green Unidentified", "Green", "Yellow", "Red", "Green",
    "Orange", "Orange", "Orange", "Orange Unidentified"
  )
)

# 处理生成Match列
df <- df %>%
  # 提取核心字符串S
  mutate(S = gsub(" Unidentified$", "", Data)) %>%
  # 按核心字符串分组
  group_by(S) %>%
  mutate(
    # 存储当前组内所有Unidentified行的周数
    unif_weeks = list(Week[grepl("Unidentified", Data)]),
    # 检查当前周是否有过去/未来的Unidentified行
    Match = as.integer(
      sapply(Week, function(w) {
        any(unif_weeks[[1]] < w) || any(unif_weeks[[1]] > w)
      })
    )
  ) %>%
  ungroup() %>%
  # 移除中间变量
  select(-S, -unif_weeks)

# 查看结果
print(df)

针对示例标记的调整

如果你的示例标记是基于「仅当Unidentified行与当前行属于同一连续的核心字符串序列」,可以使用以下代码(结合data.table的rleid函数标记连续序列):

library(dplyr)
library(data.table)

df <- df %>%
  mutate(S = gsub(" Unidentified$", "", Data)) %>%
  # 标记连续的核心字符串序列组
  mutate(group_id = rleid(S)) %>%
  # 按连续组分组处理
  group_by(group_id) %>%
  mutate(
    # 组内是否存在Unidentified行
    has_unif = any(grepl("Unidentified", Data)),
    # 组内非Unidentified行:如果组内有Unidentified则标记1
    Match = ifelse(!grepl("Unidentified", Data) & has_unif, 1, 0),
    # 组内Unidentified行:如果组内有其他非Unidentified行则标记1
    Match = ifelse(grepl("Unidentified", Data) & n() > 1, 1, Match)
  ) %>%
  ungroup() %>%
  select(-S, -group_id, -has_unif)

这个版本的结果会完全匹配你提供的示例标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:02:21