【发布时间】:2016-09-28 05:18:13
【问题描述】:
是否可以使用data.table通过多个组变量来标准化多个变量?
DT <- data.table(V1=1:20, V2=40:21, gr=c(rep(c('a'),10), rep(c('b'),10)),
grr=rep(c(rep(c('a'),5), rep(c('b'),5)),2))
gr 和 grr 是组变量。我想将每个 gr-by-grr 组内的标准化分数添加到 data.table V1.z 和 V2.z 中。
这是一个非常愚蠢的代码,用来解释我想要什么:
DTaa <- DT[gr=='a' & grr=='a',]
DTab <- DT[gr=='a' & grr=='b',]
DTba <- DT[gr=='b' & grr=='a',]
DTbb <- DT[gr=='b' & grr=='b',]
DTaa <- DTaa[,V1.z := scale(V1)]
DTaa <- DTaa[,V2.z := scale(V2)]
DTab <- DTab[,V1.z := scale(V1)]
DTab <- DTab[,V2.z := scale(V2)]
DTba <- DTba[,V1.z := scale(V1)]
DTba <- DTba[,V2.z := scale(V2)]
DTbb <- DTbb[,V1.z := scale(V1)]
DTbb <- DTbb[,V2.z := scale(V2)]
DTn <- rbind(DTaa, DTab, DTba, DTbb)
可能有一种方法可以在一两行中使用by。
- 然后我希望在接受数据、目标变量(在示例中为 V1 和 V2)和组变量(在示例中为 gr 和 grr)作为参数的函数中使用它。
- 如果您有一个不使用 data.table 的解决方案,那也很好(我尝试使用 dplyr 的 mutate_at,但找不到太多关于该函数的文档)。
【问题讨论】:
标签: r data.table dplyr