R如何对正则表达式匹配执行数学运算

时间:2017-01-13 10:56:47

标签: r regex dataframe

我正在处理一个未检测到(具有不同的小数分隔符),缺失值和测量值的数据帧。 我希望在较小符号(< 1变为1/2 = 0.5)之后用非一半的值替换非检测。

1)我将导入的数据帧转换为charactes。

df = data.frame(value=c("NA", "1.2", "<1.0", "<6,6"))

1)将因子转换为字符

  df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)

2)我替换所有&#34;,&#34;到&#34;。&#34;

 pattern = ","
 grep(pattern, df, value = TRUE)
 df <- data.frame(lapply(df, function(x) {gsub(pattern=pattern, replacement=".", x, perl = TRUE)}))

3)我可以找到所有非检测器,我可以用少量符号后面的值替换

 pattern = "(^<)(\\d+)"
 grep(pattern, df, value = TRUE)
 df <- data.frame(lapply(df, function(x) {gsub(pattern=pattern, replacement="\\d", x, perl = TRUE)}))

我无法找到如何对匹配的替换字符串执行数学运算,例如:

 replacement = as.character((as.numeric("\\2"))/2)

1 个答案:

答案 0 :(得分:3)

您可以在步骤2中使用以下代码:

df$value = gsub(",", ".", df$value, fixed = TRUE)

它会用value列中的文字点替换文字逗号。

然后,您可以使用gsubfn package来匹配和操作与正则表达式匹配的子字符串:

> library(gsubfn)
> df$value = gsubfn("^<(\\d*\\.?\\d+)", ~ as.numeric(x)/2, df$value)
> df
  value
1    NA
2   1.2
3  0.5
4  3.3

此处,^<(\\d*\\.?\\d+)将匹配字符串开头的<\\d*\\.?\\d+模式将匹配,并将任意浮点数/整数值捕获到第1组中,稍后将其除以2回调函数。