2017-02-14 53 views
1

我有一個字符串,如數據框帶小數點的值:僅提取之間的串

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 

週期分離所述值的量是隨機的。

回答

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" 
相關問題