我有一个包含字符串的数据框,如:
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
分隔值的句点数是随机的。
答案 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"