【发布时间】:2017-01-13 10:56:47
【问题描述】:
我正在处理一个包含未检测(使用不同的小数分隔符)、缺失值和测量值的数据框。 我想用减号后的一半值替换未检测到的值(
1) 我将导入的数据框转换为字符。
df = data.frame(value=c("NA", "1.2", "<1.0", "<6,6"))
1) 将因子转换为字符
df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)
2)我将所有“,”替换为“。”
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)
【问题讨论】:
-
对不起,你到底想得到什么?将所有前面没有
<的数字除以2?为什么替换中有正则表达式模式?在那里,您只能使用替换模式,不能在替换模式中使用\d类似的模式。 -
您的描述不太清楚,您能否添加一些数据例如并澄清您的要求?
-
第 2 步:
df$value = gsub(",", ".", df$value, fixed = TRUE)。然后是library(gsubfn),然后是gsubfn("(^|[^<\\d.])(\\d*\\.?\\d+)", function(x,y) paste0(x,as.numeric(y)/2), df$value),对吧? -
?试图获得这样的数据框
df = data.frame(value=c("NA", "1.2", "0.5", "3.3")) -
@Wiktor Stribiżew 我将您的建议代码更改为
gsubfn("(^<)(\\d*\\.?\\d+)", function(x,y) paste0(as.numeric(y)/2), df$value)