将全名矢量拆分为2个单独矢量的有效方法

Lee*_*Lee 5 string r strstr

我有一个由全名组成的向量,第一个和最后一个名字用逗号分隔,这是前几个元素的样子:

> head(val.vec)
[1] "Aabye,? Edgar"        "Aaltonen,? Arvo"      "Aaltonen,? Paavo"    
[4] "Aalvik Grimsb,? Kari" "Aamodt,? Kjetil Andr" "Aamodt,? Ragnhild
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法将它们分成2个单独的名和姓列.我的最终目的是将它们都作为更大数据框架的一部分.

我尝试使用这样的strsplit功能

names<-unlist(strsplit(val.vec,','))
Run Code Online (Sandbox Code Playgroud)

但它给了我一个长向量而不是2个独立的集合,我知道可以使用一个循环并遍历所有元素并将名字和姓氏放在2个单独的向量中,但考虑到这个事实,它有点耗时有大约25000条记录.

我看到了一些类似的问题,但讨论的是如何在C +和Java上完成

akr*_*run 5

我们可以使用read.csv转换vectordata.frame2列

read.csv(text=val.vec, header=FALSE, stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)

或者如果我们使用的是strsplit,而不是unlist(将整个转换list为单个vector),我们可以分别提取第一个和第二个元素list以创建两个vectors('v1'和'v2').

lst <- strsplit(val.vec,',')
v1 <- lapply(lst, `[`, 1)
v2 <- lapply(lst, `[`, 2)
Run Code Online (Sandbox Code Playgroud)

还有另一种选择 sub

v1 <- sub(",.*", "", val.vec)
v2 <- sub("[^,]+,", "", val.vec)
Run Code Online (Sandbox Code Playgroud)

数据

val.vec <- c("Aabye,? Edgar", "Aaltonen,? Arvo", "Aaltonen,? Paavo", 
        "Aalvik Grimsb,? Kari", "Aamodt,? Kjetil Andr", "Aamodt,? Ragnhild")
Run Code Online (Sandbox Code Playgroud)