r - 在R中的列中分隔数字字符
问题描述
在 r 我有一个显示年龄范围的列,如下所示:
Age <- c(1524, 2534, 3544, 4554, 5564, 65)
因此,对于 15 至 24 岁、15-34 岁……以及 65 岁以上的人来说
我希望我的专栏中的年龄用“-”分隔。最后一个年龄说 65<"。看起来像:
Age <- c(15-24, 25-34, 35-44, 45-54, 55-64, 65<)
谢谢
解决方案
我们可以使用从开始 ( ) 开始sub
捕获前两个字符 ( ),然后是接下来的两个字符,在捕获组的反向引用之间插入替换。然后使用到没有with的元素(..)
^
-
ifelse
paste
-
<
Age <- sub("^(..)(..)$", "\\1-\\2", Age)
ifelse(grepl("-", Age), Age, paste0(Age, "<"))
#[1] "15-24" "25-34" "35-44" "45-54" "55-64" "65<"
或者可以在一个步骤中使用substr
andsub
- 提取前两个字符 -
substr(Age, 1, 2)
- 提取接下来的两个 -
substr(Age, 3, 4)
- 然后,
paste
他们和一个-
介于两者之间 - 对于那些只有两个字符的元素,第二个
substr
调用返回""
,因此我们-
在字符串的末尾 - 将
-
末尾的($
- 字符串结尾的正则表达式元字符)替换为<
sub("-$", "<", paste0(substr(Age, 1, 2), "-", substr(Age, 3, 4)))
[1] "15-24" "25-34" "35-44" "45-54" "55-64" "65<"
推荐阅读
- c++ - 如何在两条线之间画圆弧
- amazon-web-services - Managed-CachingOptimized 策略对缓存没有任何影响
- c - 删除视频的某些部分并重新制作关键帧(c++ + libav)
- gitlab - 为什么我推送 yml 文件后管道没有触发?
- php - domain.com 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态
- django - 在管理面板上过滤后将数据导出到 Excel 工作表?
- node.js - 如何修复“套接字”类型上不存在属性“用户名”
' - javascript - 如何在 vue3js 中使用 html2pdf 从 html 中制作 pdf 文件?
- youtube - 无论如何我可以通过 VPN 使用 YouTube API
- azure-data-factory - 如何使用 Azure 数据工厂中的每个活动合并文件