用逗号分割字符串,并删除一些字符

问题描述 投票:0回答:2

以下是我想要分离的值:

f <- data.frame(x = c("c(58663.809, 232648.355, 0)", "c(5902.873, 232674.248, 0)"))

我想删除“c(”,用逗号分隔两个值,并删除最后两个字符“0)”。

生成的两列应如下所示: x = c(58663.809, 5902.873), y = c(232648.355, 232674.248

我是正则表达式新手。

非常感谢您的帮助。

r regex split tidyr stringr
2个回答
0
投票

这是使用

dplyr
tidyr
库的一种选择。

从字符串

x
中,我们删除
"c("
")"
字符,使用
separate_wider_delim
将数据划分到不同的列中,同时删除最后一个值。最后,使用
type.convert
将列值更改为其各自的类型。

library(dplyr)
library(tidyr)

f %>%
  mutate(x = gsub("c\\(|\\)", "", x)) %>%
  separate_wider_delim(x, names = c("x", "y", NA), delim = ", ") %>%
  type.convert(as.is = TRUE) %>%
  data.frame()

#          x        y
#1 58663.809 232648.4
#2  5902.873 232674.2

0
投票

首先,使用

regexpr
中的环视查找“c(”和“, 0)”之间的字符并提取
regmatches
。接下来
strsplit
rbind
type.convert
到数字。最后转换
as.data.frame
setNames

> f$x |> regexpr(r'{(?<=c\()(.*)(?=,\s0\))}', text=_, perl=TRUE) |> 
+   regmatches(x=f$x) |> strsplit(', ') |> do.call(what='rbind') |> 
+   type.convert(as.is=TRUE) |> as.data.frame() |> setNames(c('x', 'y'))
          x          y
1 58663.809 232648.355
2  5902.873 232674.248

数据:

> dput(f)
structure(list(x = c("c(58663.809, 232648.355, 0)", "c(5902.873, 232674.248, 0)"
)), class = "data.frame", row.names = c(NA, -2L))
© www.soinside.com 2019 - 2024. All rights reserved.