使用公式将新列添加到数据框

时间:2017-12-24 04:28:09

标签: r dataframe

我有一个数据框,head()看起来像这样:

                  CEMETERY    SEX CONTEXT RaHD L RaHD R DIRECTIONAL ASYMMETRY
1 Medieval-St. Mary Graces FEMALE    7172   21.2   21.6                    NA
2 Medieval-St. Mary Graces   MALE    6225   23.9   25.2                    NA
3 Medieval-St. Mary Graces   MALE    9987   23.9   23.5                    NA
4 Medieval-St. Mary Graces   MALE   11475   22.4   22.3                    NA
5 Medieval-St. Mary Graces   MALE   12356   25.8   25.4                    NA
6 Medieval-St. Mary Graces   MALE   12525   22.4   22.3                    NA

(RaHD L和RaHD R是骨测量)。 我刚刚创建了“定向不对称”#39;专栏:

MRaHDTABLE["DIRECTIONAL ASYMMETRY"]=NA

我现在需要在该列中输入数据。方向不对称的公式是'%DA =(右 - 左)/(左和右的平均值)×100' 那么(RaHD R - RaHD L)/(RaHD R和RaHD L的平均值)x 100.我不确定如何在我尝试时将其输入到我的表中:

MRaHDTABLE$'DIRECTIONAL ASYMMETRY'=(MRaHDTABLE$`RaHD R`-
MRaHDTABLE$`RaHDL`)/mean(MRaHDTABLE$`RaHD L`,MRaHDTABLE$`RaHD R`)*100

但得到了错误:

Error in mean.default(MRaHDTABLE$`RaHD L`, MRaHDTABLE$`RaHD R`) : 
  'trim' must be numeric of length one

2 个答案:

答案 0 :(得分:1)

您在公式中错误地使用了mean功能。如果查看文档(?mean),该函数将采用三个参数:数字向量(x),要修剪的值的分数(修剪)以及如何处理缺失值(na.rm)。因此,在您的规范mean(MRaHDTABLE$`RaHD L`,MRaHDTABLE$`RaHD R`)中,第一项被解释为输入向量(x),第二项被解释为trim参数。

尝试替换

mean(MRaHDTABLE$`RaHD L`,MRaHDTABLE$`RaHD R`)

使用

rowMeans(name_of_df[ , c(4,5)])

答案 1 :(得分:0)

OP要求实施公式

  

(RaHD R - RaHD L)/(RaHD R和RaHD L的平均值)×100

到目前为止发布的答案是试图使mean()函数按行计算,只计算两个数字的平均值

  

RaHD R和RaHD的平均值L =(RaHD R + RaHD L)/ 2

所以,答案可能很简单:

MRaHDTABLE["DIRECTIONAL.ASYMMETRY"] <- 
  with(MRaHDTABLE, 200 * (RaHD.R - RaHD.L) / (RaHD.R + RaHD.L))
MRaHDTABLE
  i           X2    CEMETERY    SEX CONTEXT RaHD.L RaHD.R DIRECTIONAL.ASYMMETRY
1 1 Medieval-St. Mary Graces FEMALE    7172   21.2   21.6             1.8691589
2 2 Medieval-St. Mary Graces   MALE    6225   23.9   25.2             5.2953157
3 3 Medieval-St. Mary Graces   MALE    9987   23.9   23.5            -1.6877637
4 4 Medieval-St. Mary Graces   MALE   11475   22.4   22.3            -0.4474273
5 5 Medieval-St. Mary Graces   MALE   12356   25.8   25.4            -1.5625000
6 6 Medieval-St. Mary Graces   MALE   12525   22.4   22.3            -0.4474273

注意数据与OP发布的数据有所不同。这是由于OP无法以可重现的方式提供样本数据,即通过发布dput(MRaHDTABLE)的结果。因此,我尝试尽可能少地重现数据。

with()功能用于保存输入。

数据

MRaHDTABLE <- data.frame(readr::read_table(
 "  i                 CEMETERY    SEX CONTEXT RaHD.L RaHD.R DIRECTIONAL.ASYMMETRY
  1 Medieval-St. Mary Graces FEMALE    7172   21.2   21.6                    NA
  2 Medieval-St. Mary Graces   MALE    6225   23.9   25.2                    NA
  3 Medieval-St. Mary Graces   MALE    9987   23.9   23.5                    NA
  4 Medieval-St. Mary Graces   MALE   11475   22.4   22.3                    NA
  5 Medieval-St. Mary Graces   MALE   12356   25.8   25.4                    NA
  6 Medieval-St. Mary Graces   MALE   12525   22.4   22.3                    NA"
))