权重为R的聚合数据表

权重为R的聚合数据表,r,data.table,frequency,tapply,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",

我是新使用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))
它似乎工作得很好,但输出仅给出两列:GEO和AN,并且频率在变量AN下。差不多

GEO    AN   
P1      fre1  
P1      fre2  
P2      fre3
P3      fre4
我更喜欢有三列的输出:GEO,一个具有实际值A1、A2等的列,以及第三个具有频率的列。 这样我就可以轻松地将这些数据与原始数据合并


关于如何做到这一点有什么想法吗?

请提供一个可复制的示例要将结果分配给一个新的列,请使用类似dt[,freq:=wpctAN,WG,na.rm=TRUE,by=GEO]的语法,不需要使用[]的.SDcols或shenanigans。我建议您阅读一些教程/小插曲:顺便说一句,wpct是什么?也许na.省略dt[,listANC=uniqueANC,wpctANC,WG,na.rm=TRUE,by=GEO],对Frank代码的修改。@akrun:很有魅力,谢谢!!!!listANC是独一无二的…真的很管用
GEO    AN   
P1      fre1  
P1      fre2  
P2      fre3
P3      fre4