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

如何在字母转数字后的字符串中还原插入原位置的特殊字符*

保留非事件位置的字母转连续数字处理

我有一个包含Partcpt和aoi列的数据框,其中aoi列包含事件(大写字母)和非事件(用"*"表示):

df <- data.frame(
  Partcpt = c("B","A","B","C","A","B"),
  aoi = c("B*B*B","*A*C*A*C","*B*B","A*C","*A*","*")
)

需要将其中的字母转换为连续数字,重复字母沿用之前的对应数字。之前用以下代码实现了转换,但丢失了非事件"*"的位置信息:

df$aoi_0 <- sapply(strsplit(df$aoi, split = ""), function(x) paste(match(x[x!="*"], unique(x[x!="*"])), collapse = ""))

df
  Partcpt      aoi aoi_0
1       B    B*B*B   111
2       A *A*C*A*C  1212
3       B     *B*B    11
4       C      A*C    12
5       A      *A*     1
6       B        *      

需要将"*"字符重新插入到原位置,得到如下结果:

df
  Partcpt      aoi      aoi_0
1       B    B*B*B      1*1*1
2       A *A*C*A*C   *1*2*1*2
3       B     *B*B       *1*1
4       C      A*C        1*2
5       A      *A*        *1*
6       B        *          *

解决方案

修改strsplit后的处理逻辑,不对元素进行过滤,而是逐个判断处理:保留"*",将字母替换为对应的连续数字:

df$aoi_0 <- sapply(strsplit(df$aoi, split = ""), function(x) {
  # 获取当前字符串中所有非*的唯一字符
  unique_chars <- unique(x[x != "*"])
  # 逐个处理每个字符:*直接保留,字母替换为对应的数字
  mapped_elements <- ifelse(x == "*", "*", match(x, unique_chars))
  # 将处理后的元素拼接成字符串
  paste(mapped_elements, collapse = "")
})

# 查看最终结果
print(df)

运行上述代码后,就能得到包含"*"位置信息的目标输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:39:32