gpt4 book ai didi

r - 将重复的字母转换为数字

转载 作者:行者123 更新时间:2023-12-05 09:01:37 27 4
gpt4 key购买 nike

我有这种类型的数据:

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)))) -> 在 group for id 之后,我们为每个唯一的创建唯一的 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 - 将重复的字母转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73011685/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com