r - 根据R中的字符串列创建组ID

标签 r

这可能是一个愚蠢的问题,但是如何根据 R 中的字符串列创建新的组 ID? ID的值是任意的。

ID: the column I want to create

    Name      ID  
   A09john    1     
   J43mary    2     
   B7you      3     
   A09john    1     
   J43mary    2     
   B7you      3     

我希望使用如下所示的简单代码,但我不知道该怎么做。谢谢!

df1 %>% 
  group_by(Name) %>% 
  mutate(ID = row_number(as.numeric(????)))

最佳答案

这是一种使用 dplyr::cur_group_id() (当前组标识符)的 tidyverse 方法

library(tidyverse)
d <- data.frame(
  Name = c("A09john", "J43mary", "B7you", "A09john",  "J43mary", "B7you")
)

new_data <- d |> 
  dplyr::group_by(Name) |> 
  dplyr::mutate(ID = dplyr::cur_group_id()) |> 
  ungroup()

new_data
#> # A tibble: 6 x 2
#>   Name       ID
#>   <chr>   <int>
#> 1 A09john     1
#> 2 J43mary     3
#> 3 B7you       2
#> 4 A09john     1
#> 5 J43mary     3
#> 6 B7you       2

# If you want to have the ID based on the order of appearance.
# You have to convert Name to factor first

new_data2 <- d |> 
  dplyr::mutate(Name = factor(Name, levels = unique(Name))) |> 
  dplyr::group_by(Name) |> 
  mutate(ID = dplyr::cur_group_id()) |>
  ungroup()

new_data2
#> # A tibble: 6 x 2
#> # Groups:   Name [3]
#>   Name       ID
#>   <fct>   <int>
#> 1 A09john     1
#> 2 J43mary     2
#> 3 B7you       3
#> 4 A09john     1
#> 5 J43mary     2
#> 6 B7you       3

reprex package 于 2022 年 6 月 16 日创建(v2.0.1)

row_number() 不是解决方案,因为它将计算每个组中的行号。

关于r - 根据R中的字符串列创建组ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72651410/

相关文章:

r - 给定颜色的透明等效项

r - 在 r 中检查对象是否为 null 或空字符串的最佳方法

r - 为什么我的 Rcpp 代码没有快多少?

r - cor.test R错误不兼容的尺寸

r - 如何在 knitr 中隐藏来自 ggplot 的消息

r - 如何提取已添加到 R 字符串中的文本

r - 计算从纬度/经度向量行驶的总英里数

r - 将一些字符向量粘贴到 R 中的一个字符串中

r - 如何将dplyr过滤器应用于数据帧列表?

r - 用于删除所有包含 R 中数字的单词的正则表达式