gpt4 book ai didi

r - 在 R 中解析 "continent/country/city"向量的快速方法

转载 作者:行者123 更新时间:2023-12-04 11:51:36 25 4
gpt4 key购买 nike

我在 R 中有一个字符向量,每个字符串由“大陆/国家/城市”组成,例如

x=rep("Africa / Kenya / Nairobi", 1000000)
但是“/”偶尔会在没有括号空格的情况下被错误输入为“/”,并且在某些情况下城市也丢失了,因此它会例如是“非洲/肯尼亚”,没有城市。
我想将其解析为三个向量大陆、国家和城市,如果缺少城市,则使用 NA。
对于国家,我现在做了类似的事情
country = sapply(x, function(loc) trimws(strsplit(loc,"/", fixed = TRUE)[[1]][2]))
但是如果向量 x 很长,那会很慢。在 R 中解析它的有效方法是什么?

最佳答案

考虑使用 read.table来自 base R

read.table(text = x, sep = "/", header = FALSE,
fill = TRUE, strip.white = TRUE, na.strings = "")
V1 V2 V3
1 Africa Kenya Nairobi
2 Africa Kenya Nairobi
3 Africa Kenya <NA>
或使用 fread来自 data.table
library(data.table)
fread(text = paste(x, collapse="\n"), sep="/", fill = TRUE, na.strings = "")
Africa Kenya Nairobi
1: Africa Kenya Nairobi
2: Africa Kenya <NA>
基准
x <- rep("Africa / Kenya / Nairobi", 1000000)
>
> system.time(fread(text = paste(x, collapse="\n"), sep="/", fill = TRUE, na.strings = ""))
user system elapsed
0.473 0.024 0.496

> system.time(read.table(text = x, sep = "/", header = FALSE,
+ fill = TRUE, strip.white = TRUE, na.strings = ""))
user system elapsed
0.519 0.026 0.543

> system.time({ #Using data.table
+ y <- do.call(cbind, data.table::tstrsplit(x, "/", TRUE))
+ y <- trimws(y, whitespace = " ")
+ })
user system elapsed
2.035 0.051 2.067
数据
x <- c("Africa / Kenya / Nairobi", "Africa/Kenya/Nairobi", "Africa / Kenya")

关于r - 在 R 中解析 "continent/country/city"向量的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68251848/

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