首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替换低于阈值的多个数据列

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

Stack Overflow用户
提问于 2018-01-29 23:21:54
回答 1查看 86关注 0票数 0

我正在尝试引进一个大型的环境化学分析数据集。此数据集组织如下:

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

最大的问题是,左截尾数据被写成"< 0.02",并且每个参数的这个值是不同的。当我导入csv文件时,至少有一个左截尾值的所有列都被导入为Factor datatype。我想用一条基本规则来取代每一个左派审查:

代码语言:javascript
运行
复制
 - Replace "< X" for value "X/sqrt(2)".

这只是一个示例,说明我最初是如何管理这些数据的。更换每一列是不可行的,因为有这么多的参数和阈值,即使在相同的参数和实验室内也可能有变化(如果实验室设备更新的话)。

提前谢谢你。

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

EN

回答 1

Stack Overflow用户

发布于 2018-01-29 23:57:59

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

然后,对于每一列,例如"0.2“,用您的方程替换它,然后计算这个表达式,例如:eval(parse(text = gsub("<(.*)","\\1/sqrt(2)","<0.2")))

要做到这一点,您可以使用dplyr的mutate_at

代码语言:javascript
运行
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48511606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档