新 ID 列取决于 R 中的另一列

New ID column depending on another column in R

提问人:Ahmed Hassan 提问时间:6/23/2022 最后编辑:Ahmed Hassan 更新时间:6/23/2022 访问量:538

问:

我想在我的 df 中根据另一列生成一个新的 ID 列 我的 DF 看起来像这样

> TCR <- c("CAAETSGSRLTF;CASSQEGTGVYEQYF","CGSRLTF;CASSQEGTGVYEQYF","CAAETSGSRLTF;CASSQEGT", "CAAETSGSRLTF;CASSQEGTGVYEQYF")
> df <- as.data.frame(TCR)
> df
    cdr3
1 CAAETSGSRLTF;CASSQEGTGVYEQYF
2      CGSRLTF;CASSQEGTGVYEQYF
3 CAAETSGSRLTF;CASSQEGT
4 CAAETSGSRLTF;CASSQEGTGVYEQYF

我想添加一个新列 df$ID,该列查看 df$cdr3 并为每个值分配一个新字符,如果该值重复,它将使用之前使用的相同值 所以它变成了这样

>df 
    cdr3                           ID
1 CAAETSGSRLTF;CASSQEGTGVYEQYF     X1 
2      CGSRLTF;CASSQEGTGVYEQYF     X2
3 CAAETSGSRLTF;CASSQEGT            X3
4 CAAETSGSRLTF;CASSQEGTGVYEQYF     X1

非常感谢大家

R 数据帧 Seurat

评论


答:

2赞 akrun 6/23/2022 #1

我们可以使用 in 来匹配 'cdr3' 中的值,获取索引和matchbase RuniquepasteX

df$ID <- paste0("X", match(df$cdr3, unique(df$cdr3)))

-输出

> df
                          cdr3 ID
1 CAAETSGSRLTF;CASSQEGTGVYEQYF X1
2      CGSRLTF;CASSQEGTGVYEQYF X2
3        CAAETSGSRLTF;CASSQEGT X3
4 CAAETSGSRLTF;CASSQEGTGVYEQYF X1
2赞 TarJae 6/23/2022 #2

这是使用 from package 的解决方案。有了我们,我们可以保持秩序!tidyversefct_inorderforcatsfct_inorderrow_number()

library(tidyverse)

tibble(cdr3) %>% 
  mutate(cdr3 = fct_inorder(cdr3, row_number())) %>% 
  mutate(ID = paste0("X", as.numeric(factor(cdr3))))
  cdr3                         ID   
  <ord>                        <chr>
1 CAAETSGSRLTF;CASSQEGTGVYEQYF X1   
2 CGSRLTF;CASSQEGTGVYEQYF      X2   
3 CAAETSGSRLTF;CASSQEGT        X3   
4 CAAETSGSRLTF;CASSQEGTGVYEQYF X1   
Warning messages:
1: Problem while computing `cdr3 =
fct_inorder(cdr3, row_number())`.
i the condition has length > 1 and only the
  first element will be used 
2: Problem while computing `cdr3 =
fct_inorder(cdr3, row_number())`.
i the condition has length > 1 and only the
  first element will be used