r-如何在tibble中为数值添加字母标签

  • 本文关键字:添加 标签 tibble r tibble
  • 更新时间 :
  • 英文 :


我的tibble中有一列值为10 10 20 20 20 30 30,我想创建一个新列,如下所示:10a 10b 10c 20a 20b 20c 20d 30a 30b。

仅使用dplyr的更简单简洁的解决方案。

# import library
library(dplyr)
# data
df <- data.frame(id = c(10, 10, 10, 20, 20, 20, 20, 30, 30))
# solution
df %>% 
group_by(id) %>% # grouping by id 
mutate(
alpha_id = letters[1:length(id)], # create alpha id 
new_id = paste0(id, alpha_id) # new_id = id + alpha_id
) %>% 
ungroup() %>% # ungroup
select(-alpha_id) # dropping staging variable.

输出

# A tibble: 9 x 2
id new_id
<dbl> <chr> 
1    10 10a   
2    10 10b   
3    10 10c   
4    20 20a   
5    20 20b   
6    20 20c   
7    20 20d   
8    30 30a   
9    30 30b 

BaseR

df$x2 <- ave(df$x, df$x, FUN = function(.x) paste0(.x, letters[seq_len(length(.x))]))
x  x2
1 10 10a
2 10 10b
3 10 10c
4 20 20a
5 20 20b
6 20 20c
7 20 20d
8 30 30a
9 30 30b

dplyr

df <- data.frame(x = c(10, 10, 10, 20, 20, 20, 20, 30, 30))
library(dplyr)
df %>% group_by(x) %>%
mutate(x2 = paste0(x, letters[row_number()]))
# A tibble: 9 x 2
# Groups:   x [3]
x x2   
<dbl> <chr>
1    10 10a  
2    10 10b  
3    10 10c  
4    20 20a  
5    20 20b  
6    20 20c  
7    20 20d  
8    30 30a  
9    30 30b

这里有一个使用dplyrdata.table:的经济解决方案

首次转换为数据帧:

df <- data.frame(x = c(10, 10, 10, 20, 20, 20, 20, 30, 30))

现在使用data.table的函数rowidrowid上的内置常数letters(用于小写字母(在dplyr中进行转换(归功于@Henrik(:

library(dplyr)
library(data.table)
df %>%
mutate(x_new = paste0(x, letters[rowid(x)]))
# A tibble: 9 x 2
x x_new
<dbl> <chr>
1    10 10a  
2    10 10b  
3    10 10c  
4    20 20a  
5    20 20b  
6    20 20c  
7    20 20d  
8    30 30a  
9    30 30b 

最新更新