替换低于阈值的多个数据列

时间:2018-01-29 23:21:55

标签: r types import

我正在尝试导入化学分析的大型环境数据集。该数据集的结构如下:

  • 首先10 columns是样本信息(例如实验室,监测站,日期,坐标等)。
  • 后续(more than 90 columns)是对不同变量(如铝,pH,铜等)的观察。

最大的问题是左删失数据被写为"< 0.02",并且每个参数的值都不同。当我导入csv文件时,所有至少有一个左删失值的列都会导入为Factor datatype。我想用一个基本规则替换每个被审查的左边:

 - Replace "< X" for value "X/sqrt(2)".

这只是我想如何管理这些数据的一个例子。更换每个色谱柱是不可行的,因为参数和实验室的数量很多,即使在相同的参数和实验室内也可能有所不同(给定的实验室设备更新)。

提前谢谢你。

注意:我已将我的数据集的摘录上传为更具体。 它可以在这里: http://www.filehosting.org/file/details/722215/sample.csv

1 个答案:

答案 0 :(得分:0)

首先,我建议在read.table或read.csv中设置stringsAsFactors = FALSE

然后,对于每个要分组的列,例如&#34; 0.2&#34;并用你的等式替换它,然后评估该表达式,例如:eval(parse(text = gsub("<(.*)","\\1/sqrt(2)","<0.2")))

为所有人都可以使用dplyr&#39; s mutate_at

library(dplyr)
tdat <- data.frame(Site = letters[1:4], d1 = c(0,0,"<5",4), d2 = c("<0.5",0,7,4), stringsAsFactors = F)

myfun <- function(x){eval(parse(text = gsub("<(.*)","\\1/sqrt(2)",x)))}

tdat <- tdat %>% rowwise() %>% mutate_at(vars(d1:d2), .funs = funs(myfun))