如果质量保证代码(“ G”,“ I”,“ O”,“ S”,“ Z”,“ T”),我有一个数据帧,该数据帧我想用NA代替)可在相邻列(qflag_tmax,qflag_tmin)的对应行中找到。
一个可复制的例子
set.seed(1234)
df<-data.frame(
id = 1:12,
tmax=floor(runif(12,min=32, max=95)),
tmin=floor(runif(12,min=0,max=32)),
qflag_tmax=sample(c("G","I","O","S","Z","","NA"),12, replace=TRUE),
qflag_tmin=sample(c("G","I","O","S","T","","NA"),12, replace=TRUE),
stringsAsFactors = F
)
例如,如果同一行中的QA代码G位于qflag_tmax列中,我想用NA替换tmax中的观测值。我可以一次使用一次质量检查代码和一个变量,
df2<-within(df,tmax[grepl("G",qflag_tmax)]<-"NA")
但我正在寻找无需处理其他对象即可处理所有质量检查代码和多个变量的代码。
谢谢你的帮助。
grepl
用于模式匹配,因为您要在这里执行精确匹配%in%
。
df$tmax[df$qflag_tmax %in% c("G","I","O","S","Z","T")] <- NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句