r - 将唯一标识符添加到 R 数据框中的同一列值
问题描述
我有一个数据框如下:
index val sample_id
1 1 14 5
2 2 22 6
3 3 1 6
4 4 25 7
5 5 3 7
6 6 34 7
对于带有 sample_id 的每一行,我想添加一个唯一标识符,如下所示:
index val sample_id
1 1 14 5
2 2 22 6-A
3 3 1 6-B
4 4 25 7-A
5 5 3 7-B
6 6 34 7-C
有什么建议吗?感谢您的帮助。
解决方案
碱基R
dat$id2 <- ave(dat$sample_id, dat$sample_id,
FUN = function(z) if (length(z) > 1) paste(z, LETTERS[seq_along(z)], sep = "-") else as.character(z))
dat
# index val sample_id id2
# 1 1 14 5 5
# 2 2 22 6 6-A
# 3 3 1 6 6-B
# 4 4 25 7 7-A
# 5 5 3 7 7-B
# 6 6 34 7 7-C
tidyverse
library(dplyr)
dat %>%
group_by(sample_id) %>%
mutate(id2 = if (n() > 1) paste(sample_id, LETTERS[row_number()], sep = "-") else as.character(sample_id)) %>%
ungroup()
as.character(z)
小提示:从一个或两个代码块中删除 可能很诱人。首先,什么都不会改变(这里):base R 让你有点马虎;如果我们依赖它并且需要新字段始终存在character
,那么在所有行都具有唯一性的罕见情况下sample_id
,该列将保留integer
。dplyr
在防止这种情况下要小心得多;如果您在没有 的情况下运行 tidyverse 代码as.character
,您将看到错误。
推荐阅读
- swing - Jframe Jpanel - 打开窗口时显示结果
- c# - 'Form1.myAxMap' 由于其保护级别而无法访问
- c# - 设置 cookie 选项
- java - jxbrowser 7 JSObject.toJSONString() 的替代方法
- python - IndexError:索引 2 超出 Sklearn LabelEncoder 中大小为 2 的轴 1 的范围
- reactjs - 无法在reactjs中选中和取消选中复选框
- java - WebLogic 版本 12.2.1.1 及更高版本上的“ClassNotFoundException:org.objectweb.asm.ClassVisitor”(文档 ID 2526226.1)
- microsoft-graph-api - 获取与 MS Graph API 中的事件关联的 EventMessage
- selenium - 拒绝加载脚本,因为它违反了以下内容安全策略指令:script-src error with ChromeDriver Chrome and Selenium
- html - 如何在正文自定义CSS中将图像设置为全屏