首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符ID记录为数字ID

将字符ID记录为数字ID
EN

Stack Overflow用户
提问于 2021-11-17 20:15:26
回答 2查看 98关注 0票数 2

我需要修改一个id变量值。以下是示例数据的外观:

代码语言:javascript
复制
df <- data.frame(id = c(11,21,22,"33_AS_A","33_AS_B","33_AS_X", "35_Part1","35_Part2","35_Part4","35_Part7"),
                 Grade= c(3,3,3, 4,4,4,5,5,5,5))

> df
         id Grade
1        11     3
2        21     3
3        22     3
4   33_AS_A     4
5   33_AS_B     4
6   33_AS_X     4
7  35_Part1     5
8  35_Part2     5
9  35_Part4     5
10 35_Part7     5

我需要按照顺序给出有序的数值而不是文本值,从而将id重新编码为一个数值变量。

下面是我想要的输出:

代码语言:javascript
复制
> df2
    id Grade
1   11     3
2   21     3
3   22     3
4  331     4
5  332     4
6  333     4
7  351     5
8  352     5
9  353     5
10 354     5

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-17 20:21:10

代码语言:javascript
复制
library(dplyr)
library(stringr)
df %>%
  mutate(
    group = str_extract(id, "[0-9]+")
  ) %>%
  group_by(group) %>%
  mutate(id = as.numeric(paste0(group, if(n() > 1) row_number() else ""))) %>%
  ungroup() %>%
  select(-group)
# # A tibble: 10 × 2
#      id Grade
#   <dbl> <dbl>
# 1    11     3
# 2    21     3
# 3    22     3
# 4   331     4
# 5   332     4
# 6   333     4
# 7   351     5
# 8   352     5
# 9   353     5
#10   354     5
票数 3
EN

Stack Overflow用户

发布于 2021-11-17 20:30:57

使用基,根据数字分成组,如果组长度不是1,则添加行号:

代码语言:javascript
复制
x <- sapply(strsplit(df$id, "_"), `[`, 1)

df$ID <- unlist(sapply(split(x, x), function(i) 
  if(length(i) == 1) i else paste0(i, seq(i))))

df
#           id Grade  ID
#  1        11     3  11
#  2        21     3  21
#  3        22     3  22
#  4   33_AS_A     4 331
#  5   33_AS_B     4 332
#  6   33_AS_X     4 333
#  7  35_Part1     5 351
#  8  35_Part2     5 352
#  9  35_Part4     5 353
# 10  35_Part7     5 354
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70010974

复制
相关文章

相似问题

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