r - 如何在数据框中为类似字符串创建唯一名称?
问题描述
这是我当前的数据集。
persons<- c("James", "Michael", "Michael", "Robert", "Richard", "Harry", "Harry", "Ben", "Michael", "Harry")
因为这里的名字很常见。我想让每个名字都独一无二。为此,我使用了这组代码:
unique<- function(vec)
{
sub('[.]',':',make.names(persons,unique = TRUE))
}
Strings<- unique(vec)
我得到了我想要的输出。但我想通过使用 strsplit() 和 paste() 函数获得相同的结果。另外我想使用粘贴功能的折叠参数。
My desired output:
James
Michael
Michael:1
Robert
Richard
Harry
Harry:1
Ben
Michael:2
Harry:2
解决方案
这将完成任务:
sapply( strsplit( make.names(persons, unique = TRUE), split="[.]") , paste, collapse=":")
[1] "James" "Michael" "Michael:1" "Robert" "Richard" "Harry"
[7] "Harry:1" "Ben" "Michael:2" "Harry:2"
“技巧”是 a) 认识到使用split="."
insidestrsplit
会失败,因为句点是正则表达式通配符,b) 学习使用collapse
参数 forpaste
来连接列表项中的项目。
推荐阅读
- highcharts - 如何在包装好的 Highcharts 气泡上显示系列名称?
- python - PyQT5 主窗口导入语法
- javascript - 如何使用鼠标在旋转的画布上绘图?
- node.js - 尝试使用 create-react-app 通过 npx 安装 React 时出现 NPX 安装程序错误
- wpf - ReactiveUI WhenActivated 和虚拟滚动
- azure-digital-twins - 当存在依赖项时,是什么导致此 DTDLParserError?
- asp.net-core - 炽热的信号R
- user-interface - 在 JFrame 中替换 GridLayout 的元素
- sql-server - 即使服务器位于 PST 区域,我的日期时间也保存在 UTC 中
- dask - 我们有基于 Dask 任务的队列支持吗?