更改数据框的单位和值

Change units and values of data frame

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

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

  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 中执行此操作?

谢谢!

您可以使用 ifelse。如果 dat 是您提供的 data.frame,那么这样的事情应该有效:

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

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

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

您可以使用嵌套的 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