使用R中的权重聚合data.table

时间:2015-07-13 17:04:29

标签: r data.table frequency tapply

我是使用data.table的新手,有时会让人感到困惑。 我有一个看起来像这样的数据集(data.table)

GEO    ANC   WG  V1  ....
P1      A1  w1  v11 ....
P1      A2  w2  v12 ....
P2      A1  w3  v13 ....
P3      A1  w4  v14 ....

这是一个可重复的例子:

set.seed(123)
DT <- data.table(GEO = c("b","b","b","b","b","a","a","c"),
                 ANC = c("x","y","z","x","x",NA, "x","w"), 
                 WG=sample(100,8), 
                 c=sample(5,8, replace=T))

变量WG给出每个观察的权重。

我想以最快的方式计算每个位置AN的{​​{1}}的加权频率,然后输出我可以轻松地合并我的数据(因此我没有使用GEO)。到目前为止我所做的是:

tapply

它似乎工作正常,但输出只提供两列:dt[,lapply(.SD, function(n){wpct(n,dt[["WG"]],na.rm=T)}), by=c("GEO"),.SDcols=c("AN")] GEO,频率在变量AN下。像

这样的东西
AN

我更喜欢包含三列的输出:GEO AN P1 fre1 P1 fre2 P2 fre3 P3 fre4 GEO(实际值ANA1等),第三列包含频率。 就像我那样,我可以轻松地将这些数据与原始数据合并。

关于如何做到这一点的任何想法?

0 个答案:

没有答案