用通配符表达式替换dataframe中的值

时间:2018-04-20 15:59:45

标签: r regex replace

也许解决方案很简单,但我无法找到它:

我有一个包含两列的数据框 - 一列表示深度值,另一列表示密度值。密度值应该被视为NA,它们附有M(见下文)。

#input data
Depth Density
0.001 0.3
0.002 0.31M
0.003 0.33

我想用附加的M替换值;解决方案应该如下所示:

#desired output
Depth Density
0.001 0.3
0.002 NA
0.003 0.33

这不能给我我想要的东西

df[df == "*M"] <- NA

既不

read.table(file, na.strings = "NA, *M")

我是否必须使用不同的通配符表达式?或者R是否将密度列视为问题的因素?

提前致谢

2 个答案:

答案 0 :(得分:2)

使用sub查找和替换值

> df$Density <- as.numeric(sub(".*M", "NA", df$Density))
> df
Depth Density
1 0.001    0.30
2 0.002      NA
3 0.003    0.33

答案 1 :(得分:0)

您可以简单地强制转换为数字,R会自动将非数字元素转换为NA。由于Density是(假设为)一个因素,我们需要先将其强制转换为角色。

df$Density <- as.numeric(as.character(df$Density))
# Warning message:
# NAs introduced by coercion 
df
#   Depth Density
# 1 0.001    0.30
# 2 0.002      NA
# 3 0.003    0.33

如果Density是一个开头的角色,那么您需要的只是

df$Density <- as.numeric(df$Density)