仅提取字符串之间带小数点的值

时间:2017-02-14 21:26:18

标签: r string

我有一个包含字符串的数据框,如:

id <- c(1,2)
x <- c("...14.....5.......................395.00.........................14.........1..",
   "......114.99....................124.99................")
df <- data.frame(id,x)
df$x <- as.character(df$x)

如何只提取小数点之间的值,如395.00,114.99和124.99,而不是每行14,5或1,并将它们放在一个用逗号分隔的新列中?

理想的结果是:

  id            x2
  1         395.00
  2  114.99,124.99

分隔值的句点数是随机的。

1 个答案:

答案 0 :(得分:2)

library(stringr)
df$x2 = str_extract_all(df$x, "[0-9]+\\.[0-9]+")

df[c(1, 3)]
#   id             x2
# 1  1         395.00
# 2  2 114.99, 124.99

说明:[0-9]+匹配一个或多个数字,\\.匹配一个小数点。 str_extract_all提取所有匹配项。

新列是list列,而不是带插入逗号的字符串。这允许您在需要时访问各个元素:

df$x2[2]
# [[1]]
# [1] "114.99" "124.99"

如果您更喜欢将字符向量作为列,请执行以下操作:

df$x3 = sapply(str_extract_all(df$x, "[0-9]+\\.[0-9]+"), paste, collapse = ",")

df$x3[2]
#[1] "114.99,124.99"