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

问题描述 投票:0回答:2

我有一个数据帧,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是骨测量)。我刚刚创建了“DIRECTIONAL ASYMMETRY”专栏:

MRaHDTABLE["DIRECTIONAL ASYMMETRY"]=NA

我现在需要将数据输入该列。方向不对称的公式是'%DA =(右 - 左)/(左和右的平均值)×100'因此将是(RaHD R-RaHD L)/(RaHD R和RaHD L的平均值)×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
r dataframe
2个回答
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)])

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()函数用于保存输入。

Data

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"
))
© www.soinside.com 2019 - 2024. All rights reserved.