【问题标题】:Creating Z-Score grouped by column value in R在 R 中创建按列值分组的 Z 分数
【发布时间】:2018-04-09 05:16:29
【问题描述】:

我想知道在 R 中是否有一种简单的方法来创建按列值分组的 Z 分数列。

例如,像这样转一个数据框

  Obs      Year          Dollars
   1       1960            2
   2       1960            3
   3       1960            5
   4       1960            6
   5       1961           15
   6       1961           20 
   7       1961           25
   8       1961           40

变成这样的

  Obs      Year          Dollars     Z-Score
   1       1960            2         -1.265
   2       1960            3         -0.633
   3       1960            5          0.633
   4       1960            6          1.266
   5       1961           15         -1.069
   6       1961           20         -0.535
   7       1961           25          0
   8       1961           40          1.604

样本按年份分开的地方

【问题讨论】:

  • 这是您的完整数据吗?我得到了完全不同的 z 分数。
  • @RuiBarradas 这只是一个随机的例子。我手动计算了 z 分数,所以它可能是错误的。但我找到了 1960 (4, 1.58) 和 1961 (25, 9.35) 的平均值/SD,然后手动计算了

标签: r normalization


【解决方案1】:

base R里面很简单,用ave就行了。

dat$Z.Score <- ave(dat$Dollars, dat$Year, FUN = scale)
dat
#  Obs Year Dollars    Z.Score
#1   1 1960       2 -1.0954451
#2   2 1960       3 -0.5477226
#3   3 1960       5  0.5477226
#4   4 1960       6  1.0954451
#5   5 1961      15 -0.9258201
#6   6 1961      20 -0.4629100
#7   7 1961      25  0.0000000
#8   8 1961      40  1.3887301

数据。

dat <-
structure(list(Obs = 1:8, Year = c(1960L, 1960L, 1960L, 1960L, 
1961L, 1961L, 1961L, 1961L), Dollars = c(2L, 3L, 5L, 6L, 15L, 
20L, 25L, 40L)), .Names = c("Obs", "Year", "Dollars"), class = "data.frame", row.names = c(NA, 
-8L))

编辑。
在 cmets 中与 akrun 讨论之后,我将使用包 data.table 发布他的解决方案。结果是一样的,只是结果的类不同,dat变成了data.table类的对象。

library(data.table)

setDT(dat)[, Z.Score := scale(Dollars), Year]

【讨论】:

  • data.table setDT(dat)[, Z.Score := scale(Dollars), Year]
  • @akrun 我相信您应该添加该评论作为答案。
  • @RuiBarradas 没关系。它只与您的答案相似
  • @akrun 大体原理是一样的,但data.table却有所不同。
  • 没关系,我想你可以在答案中编辑它,因为骨架是一样的
猜你喜欢
  • 2020-09-18
  • 2011-09-03
  • 2021-11-17
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多