首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字母序列与数字序列R

字母序列与数字序列R
EN

Stack Overflow用户
提问于 2022-05-20 16:25:23
回答 4查看 51关注 0票数 2

我有一个数据框架,看起来像:

代码语言:javascript
复制
df <- as.data.frame(c("AAA", "AAB", "AAC", "BBA"))
df

1                           AAA
2                           AAB
3                           AAC
4                           BBA

我想得到这样的东西:

代码语言:javascript
复制
1                           111
2                           112
3                           113
4                           221
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-05-20 16:26:17

base R中,我们可以使用chartr

代码语言:javascript
复制
df[[1]] <- chartr("ABC", "123", df[[1]])
df[[1]]
#[1] "111" "112" "113" "221"

如果替换的值有多个字符,则一般的解决方案是str_replace_all --使用命名的键/值向量来匹配和替换

代码语言:javascript
复制
library(stringr)
 str_replace_all(df[[1]],   setNames(c("1", "2", "3"), c("A", "B", "C")))
[1] "111" "112" "113" "221"
票数 5
EN

Stack Overflow用户

发布于 2022-05-20 16:37:18

另一种选择是使用基数R中的LETTERS和命名向量将字母转换为各自的数字。

代码语言:javascript
复制
libary(tidyverse) 

map_chr(strsplit(df$x, ""), ~ str_flatten(setNames(seq_along(LETTERS), LETTERS)[.]))
[1] "111" "112" "113" "221"
票数 3
EN

Stack Overflow用户

发布于 2022-05-20 16:47:11

另一种选择是使用gsubfn将字母替换为其编号:

代码语言:javascript
复制
library(gsubfn)
v <- setNames(seq_along(LETTERS), LETTERS)
transform(df, numbers = gsubfn("(.)", as.list(v), df[[1]]))

输出:

代码语言:javascript
复制
  c..AAA....AAB....AAC....BBA.. numbers
1                           AAA     111
2                           AAB     112
3                           AAC     113
4                           BBA     221
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72322047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档