R Dataframe 中的条件重命名值

velaa5lx  于 2023-05-04  发布在  其他
关注(0)|答案(3)|浏览(266)

我有一个简单的dataframe,其中有一个6位数的大列,格式为R

library(dplyr)

df <- data.frame(number = c(111110, 111211, 111311, 111411, 111110, 111311, 930920, 039203, 940291, 111110), 
                 value = seq(1,10,1)
                 )

输出

df
#   number value
#1  111110     1
#2  111211     2
#3  111311     3
#4  111411     4
#5  111110     5
#6  111311     6
#7  930920     7
#8   39203     8
#9  940291     9
#10 111110    10

我想用“ID”重命名这些数字,但我遇到的问题是数据集中有重复的数字。

预期输出

df
#   number  ID  value
#1  111110  ID-1   1
#2  111211  ID-2   2
#3  111311  ID-3   3
#4  111411  ID-4   4
#5  111110  ID-1   5
#6  111311  ID-3   6
#7  930920  ID-5   7
#8   39203  ID-6   8
#9  940291  ID-7   9
#10 111110  ID-1   10

问题

如何在数据框架中创建额外的列,为每个唯一的数字提供自己的ID?我认为dplyr包和mutate函数可能是一个选项?

wqnecbli

wqnecbli1#

number列创建factor,然后将其转换为整数。从factorinteger的转换将为您提供因子水平的索引:

df <- data.frame(number = c(111110, 111211, 111311, 111411, 111110, 111311, 930920, 039203, 940291, 111110), 
    value = seq(1,10,1)
)

df <- df %>% mutate(ID=paste0("ID-", as.integer(factor(number))))

这给出:

df

   number value   ID
1  111110     1 ID-2
2  111211     2 ID-3
3  111311     3 ID-4
4  111411     4 ID-5
5  111110     5 ID-2
6  111311     6 ID-4
7  930920     7 ID-6
8   39203     8 ID-1
9  940291     9 ID-7
10 111110    10 ID-2

如果要保留ID列中的原始顺序,请指定因子的水平:

df <- df %>% mutate(ID=paste0("ID-", as.integer(factor(number, levels=unique(number)))))
jchrr9hc

jchrr9hc2#

可以使用match

library(dplyr)
df %>% 
  mutate(id = paste0("ID-", match(number, unique(number))))

   number value   id
1  111110     1 ID-1
2  111211     2 ID-2
3  111311     3 ID-3
4  111411     4 ID-4
5  111110     5 ID-1
6  111311     6 ID-3
7  930920     7 ID-5
8   39203     8 ID-6
9  940291     9 ID-7
10 111110    10 ID-1
6psbrbz9

6psbrbz93#

使用cur_group_id

library(dplyr)
df %>%
   mutate(id = sprintf('ID-%d', cur_group_id()), .by = number)
  • 输出
number value   id
1  111110     1 ID-1
2  111211     2 ID-2
3  111311     3 ID-3
4  111411     4 ID-4
5  111110     5 ID-1
6  111311     6 ID-3
7  930920     7 ID-5
8   39203     8 ID-6
9  940291     9 ID-7
10 111110    10 ID-1

相关问题