我有这类数据:

df <- data.frame(
  Partcpt = c("B","A","B","C"),
  aoi = c("ACA","CB","AA","AABC" )
)

我想用连续的数字替换aoi中的单个字母,除非字母是重复的,在这种情况下,应重复先前的替换数字.有正则表达式解决这个问题吗?

所需输出如下:

  Partcpt  aoi
1       B  121
2       A   12
3       B   11
4       C 1123

推荐答案

以下是tidyverse解决方案:

完成这个技巧的线是mutate(ID = match(paste(aoi), unique(paste(aoi))))->;在为id分组后,我们 for each 唯一的aoi创建唯一的id:

library(dplyr)
library(tidyr)

df %>% 
  mutate(id = row_number()) %>% 
  separate_rows(aoi, sep = "(?<!^)(?!$)") %>% #thanks to Chris Ruehlemann
  #separate_rows(aoi, sep= "") %>% #alternative
  #filter(aoi != "") %>%  #alternative
  group_by(id) %>% 
  mutate(ID = match(paste(aoi), unique(paste(aoi)))) %>% 
  mutate(ID = paste0(ID, collapse = "")) %>% 
  slice(1) %>% 
  ungroup() %>% 
  select(Partcpt, aoi=ID)

或者感谢@Henrik:

sapply(strsplit(df$aoi, split = ""), \(x) paste(match(x, unique(x)), collapse = ""))
  Partcpt aoi  
  <chr>   <chr>
1 B       121  
2 A       12   
3 B       11   
4 C       1123 

R相关问答推荐

从cv.glmnet R包中查找培训SSE

从R中的地址提取街道名称

如何将log 2刻度上的数字转换为自然log

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

整数成随机顺序与约束R?

如何在R中合并两个基准点?

当我们有多个特殊字符时,使用gsub删除名称和代码'

未识别时区

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

具有重复元素的维恩图

为左表中的所有行使用值Fill滚动左连接

自动STAT_SUMMARY统计与手动标准误差之间的差异

循环遍历多个变量,并将每个变量插入函数R

整理曲线图、曲线图和点图

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

变异以按组从其他列创建具有最大和最小值的新列

为什么不能使用lApply在包装函数中调用子集

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

使用同一行中的前一个值填充R矩阵中的缺失值