答案 0 :(得分:4)
要分割字符串,您可以使用:
vect <- as.numeric(strsplit(gsub("[^[:digit:]\\. \\s]","",x)," "))
x <- vect[1]
y <- vect[2]
这会删除不是空格,点或数字的所有内容。 strsplit拆分向量中剩下的字符串。另请参阅相关的帮助文件。
分配可以循环或使用Gavin的功能完成。我只是命名他们。
names(vect) <-c("x","y")
vect["x"]
x
1.337381
对于更大的数据集,我喜欢将各个部分放在一起,以避免使用名称重载工作区。
答案 1 :(得分:2)
以下是一些可以执行您想要的操作的步骤。不能说它是最有效或最优雅的解决方案......
string <- "[(1.33738072607023, 27.9489435205271)]"
string <- gsub("[^[:digit:]\\. \\s]", "", string)
splt <- strsplit(string, " ")[[1]]
names(splt) <- c("x","y")
FOO <- function(name, strings) {
assign(name, as.numeric(strings[name]), globalenv())
invisible()
}
lapply(c("x","y"), FOO, strings = splt)
最后一行将返回:
> lapply(c("x","y"), FOO, strings = splt)
[[1]]
NULL
[[2]]
NULL
我们在全球环境中分配了x
和y
> x
[1] 1.337381
> y
[1] 27.94894
答案 2 :(得分:2)
strapply
使得只使用相对简单的正则表达式从字符串中提取数字相当容易。这里s
是输入字符串,v
是带有两个数字的数字向量:
library(gsubfn)
v <- strapply(s, "[0-9.]+", as.numeric)[[1]]
x <- v[1]
y <- v[2]