R Data.table用于计算跨多列的摘要统计信息
发布时间:2020-12-14 04:35:01 所属栏目:大数据 来源:网络整理
导读:我有一个类似的问题: R: data.table : searching on multiple columns AND setting data type,但这个问题没有得到完全回答.我有一个成对表,在概念上看起来像下面的那个.该表是将非常大的距离矩阵转换为data.table( 100,000,000行)的结果,使得比较a,b与b,a相
我有一个类似的问题:
R: data.table : searching on multiple columns AND setting data type,但这个问题没有得到完全回答.我有一个成对表,在概念上看起来像下面的那个.该表是将非常大的距离矩阵转换为data.table(> 100,000,000行)的结果,使得比较a,b与b,a相同.但是,a和b可能出现在V1或V2列中.我想使用data.table的查询样式计算简单的汇总统计信息,但我还没有弄清楚如何在任一列中选择键.这可能吗?
我已尝试在任一方向设置密钥,但这只返回该列的数据.我也尝试使用list(),但是返回交集(可以理解),我希望有一个by = key1 | key2,但没有这样的运气. > set.seed(123) > > #create pairwise data > a<-data.table(t(combn(3,2))) > #create column that is equal both ways,1*2 == 2*1 > dat<-a[,data:=V1*V2] > dat V1 V2 data 1: 1 2 2 2: 1 3 3 3: 2 3 6 #The id ==2 is the problem here,the mean should be 4 ((2+6)/2) > #set keys > setkey(dat,V1,V2) > > #One way data > dat[,c("MEAN","VAR"):=list(mean(data),var(data)),by=V1] > dat V1 V2 data MEAN VAR 1: 1 2 2 2.5 0.5 2: 1 3 3 2.5 0.5 3: 2 3 6 6.0 NA > #The other way > dat[,by=V2] > dat V1 V2 data MEAN VAR 1: 1 2 2 2.0 NA 2: 1 3 3 4.5 4.5 3: 2 3 6 4.5 4.5 > > #The intersect just produces the original data > dat[,by=list(V1,V2)] > dat V1 V2 data MEAN VAR 1: 1 2 2 2 NA 2: 1 3 3 3 NA 3: 2 3 6 6 NA > > #Meaningless but hopefull attempt. > dat[,by=V1|V2] > dat V1 V2 data MEAN VAR 1: 1 2 2 3.666667 4.333333 2: 1 3 3 3.666667 4.333333 3: 2 3 6 3.666667 4.333333 #The goal is to create a table would look like this (using mean as an example) ID MEAN 1 2.5 2 4.0 3 4.5 我的默认想法是通过dat [V1 == x | V2 == x]语句循环,但我不认为我正在利用data.table的全部功能返回一列id,意思是var作为摘要列. 谢谢! 解决方法
最简单的方法是重新排列数据以达到你想要的效果(我在下面使用数据回收而不是在第一部分中输入c(数据,数据)):
dat[,list(c(V1,V2),data)][,list(MEAN = mean(data)),by = V1] # V1 MEAN #1: 1 2.5 #2: 2 4.0 #3: 3 4.5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |