也许解决方案很简单,但我无法找到它:
我有一个包含两列的数据框 - 一列表示深度值,另一列表示密度值。密度值应该被视为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是否将密度列视为问题的因素?
提前致谢
答案 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)