r - 拆分名称并在 R 中创建矩阵
问题描述
我有这个数据:
names <- c("Baker, Chet", "Jarret, Keith", "Miles Davis")
我想操纵它,所以名字排在第一位,所以我把它分开了:
names <- strsplit(names, ", ")
[[1]]
[1] "Baker" "Chet"
[[2]]
[1] "Jarret" "Keith"
[[3]]
[1] "Miles Davis"
问题是,当我想把它们放在一起时,名字"Miles Davis"
会出错,因为它已经是full name
.
matrix(unlist(names), ncol=2, byrow = TRUE)
[,1] [,2]
[1,] "Baker" "Chet"
[2,] "Jarret" "Keith"
[3,] "Miles Davis" "Baker"
我应该怎么做才能创建一个df
看起来像这样的新产品:
"Chet Baker"
"Keith Jarret"
"Miles Davis"
解决方案
您可以轻松地调整正则表达式中使用的模式,使其匹配逗号后跟 0+ 个空格或 1+ 个空格:
names <- strsplit(names, ",\\s*|\\s+")
matrix(unlist(names), ncol=2, byrow = TRUE)
# [,1] [,2]
#[1,] "Baker" "Chet"
#[2,] "Jarret" "Keith"
#[3,] "Miles" "Davis"
由于期望的结果与最初描述的不同,这里有一种不同的方法:
names <- strsplit(names, ",\\s*")
data.frame(name = sapply(names, function(x) paste(rev(x), collapse = " ")))
# name
#1 Chet Baker
#2 Keith Jarret
#3 Miles Davis
另一种选择,在正则表达式中使用捕获组将逗号之前的所有内容与逗号之后的所有内容交换,并将逗号替换为空格。
names <- c("Baker, Chet", "Jarret, Keith", "Miles Davis")
sub("([^,]+),\\s*([^,]+)$", "\\2 \\1", names)
#[1] "Chet Baker" "Keith Jarret" "Miles Davis"
推荐阅读
- python - 获取 N 叉树中较大祖先的数量
- css - 如何在此元素中弹出过滤器 css 属性以使背景保持白色?
- python - Python:变量不变
- node.js - 从两个不同的文件夹上传到heroku
- angularjs - 如何检索oracle sql查询的进度?
- docker - 无法从 windows-ubuntu 执行 sudo docker pull ubuntu
- mongodb - 通过 Get 从 mongodb 嵌套 JSON 输出
- r - rnoaa 站数据提取超时
- javascript - 在倾斜的 Y 轴上旋转 ThreeJS Object3D
- c++ - LeakSanitizer 和泄漏库