更改数据框的单位和值

时间:2019-01-15 15:39:42

标签: r match units-of-measurement

我有一个数据框,其中包含化合物的浓度及其在水中的目标值。 对于某些化合物,注册值的单位不同于其最大值。

我想将目标转换为相同的值单位。 例如,我有这个:

  Value    Dimension  Target   Unit
A  0.001    ug/L       12     ng/L
B  0.1      ug/L       1      ug/L
C  0.25     ug/L       1      ng/L

我想得到:

   Value    Dimension  Target   Unit
A  0.001    ug/L       0.012     ug/L
B  0.1      ug/L       1         ug/L
C  0.25     ug/L       0.001     ug/L

1ng / L = 1000 ug / L

如何在R中做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用ifelse。如果dat是您提供的data.frame,则应该可以执行以下操作:

dat[, "Target"] <- ifelse(dat[,"Unit"]=="ng/L", dat[,"Target"]/1000, dat[,"Target"])

如果您有两个以上的不同部门,则需要嵌套ifelse调用或连续调用ifelse

请注意,ifelseif的向量化版本,可一次处理整列。

答案 1 :(得分:0)

您可以使用嵌套的ifelse语句来捕获所有3种情况(从ngug,从ugng) >

ifelse(df$Dimension == df$Unit, df$Target, 
       ifelse(df$Dimension != df$Unit & grepl('ug', df$Dimension), df$Target / 1000, 
                                                                        df$Target * 1000))

#[1] 0.012 1.000 0.001