gpt4 book ai didi

r - 在 R 中拆分名称并创建矩阵

转载 作者:行者123 更新时间:2023-12-04 17:15:22 25 4
gpt4 key购买 nike

我有这个数据:

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"

这是引用: http://rfunction.com/archives/1499

最佳答案

您可以轻松调整正则表达式中使用的模式,使其匹配逗号后跟 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"

关于r - 在 R 中拆分名称并创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50370972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com