【问题标题】:R: Standardize using mean and sd functionsR:使用均值和标准差函数进行标准化
【发布时间】:2012-03-27 20:01:35
【问题描述】:

我正在尝试做一个简单的转换。我使用了以下代码,它运行良好:

data_stdz <- transform(data_header, z.v1 = v1+2)

但是,我无法使用以下代码:

data_stdz <- transform(data_header, z.v1 = (v1 - mean(v1))/(2*sd(v1))

我也尝试过让 mean 函数起作用:

data_stdz <- transform(data_header, z.v1 = mean(v1)

但是,我不断收到以下错误:

Error: unexpected symbol in:
"data_std2 <- transform(data_header, z.v1 = mean(v1)
data_std2"

所以我猜这与我如何使用 mean 和 sd 函数有关,但我一直无法弄清楚。

数据示例:

v1   v2  v3
6.7 3.8 1.2
6.3 3.2 1.2
6.1 2.6 1.6
7   2.4 1
NA  NA  NA
6.5 3.6 2.6
6.1 2.4 1.6
6   5.6 5.2
7   2.8 1
6.7 3.8 1.4
5.7 4.2 2.6
5.1 5.6 5
NA  NA  NA

【问题讨论】:

  • 该错误不会立即对我尖叫mean() 或sd()。您在两个 transform() 调用中都缺少右括号。看起来这就是问题的原因。
  • 感谢 Gavin 的括号!
  • scale 函数也值得一看。

标签: r transform mean standard-deviation standardized


【解决方案1】:

Base R 具有用于此目的的scale() 函数。

【讨论】:

  • 虽然我的回答回答了发帖人的直接问题,但 Dirks 是一种更好的方法来解决您正在尝试做的事情。 scale 有许多其他参数,这使得它对于许多不同的任务非常方便。
  • 我确实考虑了 scale () 函数,但不确定如何使用它计算 2*sd。
【解决方案2】:

您的问题很可能(除了 gavin 所说的)是 NA。使用na.rm=TRUE,如:

transform(data_header, z.v1 = (v1 - mean(v1, na.rm =T))/(2*sd(v1, na.rm =T)))

【讨论】:

  • 看看 Dirk 的建议。这可能是您尝试的更好方法。当您遇到函数问题时(不确定您对 R 有多陌生),Tom 使用 ?mean 中的 ?function.name 为您提供了一个很好的函数帮助文件,包括参数。在许多情况下,不正确的参数说明会导致错误。
  • 对 R 来说非常陌生,但对看到双括号并不陌生。感谢您的建议,因为我在寻找有关均值函数的信息并且没有帮助,但 ?mean 是。
猜你喜欢
  • 2017-10-09
  • 1970-01-01
  • 2020-07-22
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
相关资源
最近更新 更多