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

R语言中如何按grp前缀拆分数据框为on和off子集?

解决方案

你的问题出在直接用精确匹配尝试匹配通配符格式的字符串:subset(data, grp= 'on_*')里的=是赋值操作(正确的比较应该用==),而且就算改成==,'on_*'是一个固定字符串,你的grp列里没有这个值,同时*在这里不是正则通配符,无法匹配on_1、on_3这类格式的内容。

下面是几种可行的实现方式:

方法1:用grepl结合subset筛选

利用正则表达式匹配grp列的开头字符,筛选出目标行后提取duration列并转为数据框:

# 提取on开头的子集
data_on <- data.frame(duration = subset(data, grepl("^on_", grp))$duration)
# 提取off开头的子集
data_off <- data.frame(duration = subset(data, grepl("^off_", grp))$duration)
  • grepl("^on_", grp):返回逻辑向量,标记grp列中以on_开头的行
  • subset(...):根据逻辑向量筛选行,再提取duration列,最后用data.frame()保持数据框格式

方法2:直接用逻辑索引筛选

不依赖subset,直接通过逻辑索引定位目标行:

data_on <- data[grepl("^on_", data$grp), "duration", drop = FALSE]
data_off <- data[grepl("^off_", data$grp), "duration", drop = FALSE]
  • drop = FALSE:确保结果保持数据框格式,而不是转为向量

方法3:先提取前缀再筛选

先从grp列中提取on/off前缀,再根据前缀筛选:

# 提取grp的前缀(去掉_及后面的内容)
data$prefix <- sub("_.*", "", data$grp)
# 筛选并提取duration列
data_on <- data[data$prefix == "on", "duration", drop = FALSE]
data_off <- data[data$prefix == "off", "duration", drop = FALSE]
  • sub("_.*", "", data$grp):用正则替换掉_及之后的所有字符,得到前缀on或off

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:28:15