从数据框中提取数字
Extracting the numbers from the data frame
我有一个包含 "Calculation" 列的数据框,可以通过以下代码重现:
a <- data.frame(Id = c(1:3), Calculation = c('[489]/100','[4771]+[4777]+[5127]+[5357]+[5597]+[1044])/[463]','[1044]/[463]'))
> str(a)
'data.frame': 3 obs. of 2 variables:
$ Id : int 1 2 3
$ Calculation: Factor w/ 3 levels "[1044]/[463]",..: 3 2 1
请注意,"Calculation" 列中有两种类型的数字:大多数被括号括起来,但有些(在本例中为数字 100)不是(这在我的应用程序中有意义) ).
我想做的是将计算列中出现的所有不同数字提取到 return 一个包含这些数字并集的向量。理想情况下,我希望能够区分括号之间的数字和不在括号之间的数字。这一步不是很重要(如果它使它变得复杂),因为不在括号之间的数字很少,我可以手动检测它们。所以在这种情况下所需的输出将是:
b = c(489,4771,4777,5127,5357,5597,1044,463)
提前致谢
我们可以使用 library(stringr)
中的 str_extract_all
。使用正则表达式 lookbehind ((?<=\[)
),我们匹配前面有 [
的数字 \d+
,将它们提取到 list
、unlist
中以将其转换为vector
然后把character
改成numeric
(as.numeric
),得到unique
个元素。
library(stringr)
unique(as.numeric(unlist(str_extract_all(a$Calculation, '(?<=\[)\d+'))))
#[1] 489 4771 4777 5127 5357 5597 1044 463
我有一个包含 "Calculation" 列的数据框,可以通过以下代码重现:
a <- data.frame(Id = c(1:3), Calculation = c('[489]/100','[4771]+[4777]+[5127]+[5357]+[5597]+[1044])/[463]','[1044]/[463]'))
> str(a)
'data.frame': 3 obs. of 2 variables:
$ Id : int 1 2 3
$ Calculation: Factor w/ 3 levels "[1044]/[463]",..: 3 2 1
请注意,"Calculation" 列中有两种类型的数字:大多数被括号括起来,但有些(在本例中为数字 100)不是(这在我的应用程序中有意义) ).
我想做的是将计算列中出现的所有不同数字提取到 return 一个包含这些数字并集的向量。理想情况下,我希望能够区分括号之间的数字和不在括号之间的数字。这一步不是很重要(如果它使它变得复杂),因为不在括号之间的数字很少,我可以手动检测它们。所以在这种情况下所需的输出将是:
b = c(489,4771,4777,5127,5357,5597,1044,463)
提前致谢
我们可以使用 library(stringr)
中的 str_extract_all
。使用正则表达式 lookbehind ((?<=\[)
),我们匹配前面有 [
的数字 \d+
,将它们提取到 list
、unlist
中以将其转换为vector
然后把character
改成numeric
(as.numeric
),得到unique
个元素。
library(stringr)
unique(as.numeric(unlist(str_extract_all(a$Calculation, '(?<=\[)\d+'))))
#[1] 489 4771 4777 5127 5357 5597 1044 463