数据格式如下: “性别Bornyear名国” 所以,数据列为:
[[1]] M-1900-Chambers-us
[[2]] F-1900-Calin-Sanchez-es
[[3]] M-1900-Aboul-Enein-us
...
...
我尝试使用
strsplit(as.charactoe(data), "\\-")
但是有些名称只拆分为一部分,有些则拆分为两部分或三部分。 如果我只是想与国家相关
split_data <- strsplit(as.charactoe(data), "\\-")
lapply(split_data, function(x)x[length(x)])
这是最好的方法吗? 如果我想把这个名字拿出去怎么样?
答案 0 :(得分:1)
一些基准测试结果(所有三个选项都提取了提供样本数据的国家/地区名称),gsub是最快的:
unlist(lapply(strsplit(as.character(data), "\\-"), function(x)x[length(x)]))
#[1] "us" "es" "us"
gsub('.*-([^-]+)$', '\\1', data)
#[1] "us" "es" "us"
do.call(rbind, str_match_all(data, '.*-([^-]+)$'))[,2]
#[1] "us" "es" "us"
library(stringr)
library(microbenchmark)
check.identical <- function(values) {
all(sapply(values[-1], function(x) identical(values[[1]], x)))
}
microbenchmark(unlist(lapply(strsplit(as.character(data), "\\-"), function(x)x[length(x)])),
gsub('.*-([^-]+)$', '\\1', data),
do.call(rbind, str_match_all(data, '.*-([^-]+)$'))[,2],
check=check.identical)
Unit: microseconds
expr min lq mean median uq max neval cld
unlist(lapply(strsplit(as.character(data), "\\\\-"), function(x) x[length(x)])) 15.396 16.4655 20.09603 18.3895 20.3145 87.670 100 b
gsub(".*-([^-]+)$", "\\\\1", data) 11.975 13.6850 15.31916 15.3960 16.6790 27.799 100 a
do.call(rbind, str_match_all(data, ".*-([^-]+)$"))[, 2] 35.923 37.6340 43.93346 39.7720 41.4830 149.679 100 c