【问题标题】:Normalize a variable data.table规范化变量 data.table
【发布时间】:2016-04-06 00:12:39
【问题描述】:

我希望通过减去每个组内的平均值来规范化 data.table 中的变量。我是通过以下方式完成的:

dx <- data.table(x=c(1,3,5,1,8,11),group=factor(c(1,1,1,2,2,2)))
dy <- dx[,.(xmean=mean(x)),by=.(group)]
setkey(dx,group)
setkey(dy,group)
dx[dy,x_norm:=x-xmean]

我想知道是否有更简洁的方法来做到这一点?

【问题讨论】:

  • 顺便说一句,你的方式应该是相当有效的,因为当你单独使用mean时,这里描述了一些特殊的优化:stackoverflow.com/q/22137591你可以做dx[, xm := mean(x), by=group][, `:=`(x_norm = x-xm, xm = NULL)]跨度>

标签: r data.table


【解决方案1】:

您可以使用scale 函数来执行此操作:

dx[, x_norm := scale(x, center = TRUE, scale = FALSE), by = group]

这相当于@Hadd E. Nuff 的方式:

dx[, x_norm := x - mean(x), by = group]

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 2018-01-09
    • 2011-06-08
    • 2015-01-10
    • 2012-05-22
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多