提问人:Ahmed Hassan 提问时间:6/23/2022 最后编辑:Ahmed Hassan 更新时间:6/23/2022 访问量:538
新 ID 列取决于 R 中的另一列
New ID column depending on another column in R
问:
我想在我的 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
非常感谢大家
答:
2赞
akrun
6/23/2022
#1
我们可以使用 in 来匹配 'cdr3' 中的值,获取索引和match
base R
unique
paste
X
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 的解决方案。有了我们,我们可以保持秩序!tidyverse
fct_inorder
forcats
fct_inorder
row_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
评论