我是使用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
(实际值AN
,A1
等),第三列包含频率。
就像我那样,我可以轻松地将这些数据与原始数据合并。
关于如何做到这一点的任何想法?