2014-03-03 77 views
2

我在R中有一個data.frame,其中包含{some letters} - {一個數字} {一個字母}的字符串的列。 x <- 'KFKGDLDSKFDSKJJFDI-4567W'。所以我想要例如爲那個特定的例子/行獲得一個包含數字(例如'4567')的列。 Theres只有一個數字,但它可以是任何合理的長度。我如何從data.frame中的每一行提取數字?從一串數字和文本中提取數字

+3

'gsub(「[^ 0-9] +」,「」,「KFKGDLDSKFDSKJJFDI-4567W」)'? – A5C1D2H2I1M1N2O1R2T1

回答

1

使用regular expressions來提取子字符串。使用as.numeric所得到的字符串轉換爲數字:

string = 'KFKGDLDSKFDSKJJFDI-4567W' 
as.numeric(regmatches(string, regexpr('\\d+', string))) 
# 4567 

您可以輕鬆地使用這個在您的數據幀,以創建新列:

#data = data.frame(x = rep(string, 10)) 
transform(data, y = as.numeric(regmatches(x, regexpr('\\d+', x)))) 
#       x y 
# 1 KFKGDLDSKFDSKJJFDI-4567W 4567 
# 2 KFKGDLDSKFDSKJJFDI-4567W 4567 
# 3 KFKGDLDSKFDSKJJFDI-4567W 4567 
# 4 KFKGDLDSKFDSKJJFDI-4567W 4567 
… 
0

試試這個:

gsub("[a-zA-Z]+-([0-9]+)[a-zA-Z]","\\1", "KFKGDLDSKFDSKJJFDI-4567W")