如何按透视表分组,并在同一表数据中细分。表R
Data.table有多种方法可以使用by=函数生成透视表, 但是,我们如何将细分信息按形状分组到同一组中呢 样本数据如何按透视表分组,并在同一表数据中细分。表R,r,data.table,pivot,R,Data.table,Pivot,Data.table有多种方法可以使用by=函数生成透视表, 但是,我们如何将细分信息按形状分组到同一组中呢 样本数据 # DT DT <- data.table(GROUP = c("A_GROUP","B_GROUP","B_GROUP","B_GROUP","A_GROUP", "A_GROUP","B_GROUP","B_GROUP","B_GROUP","A_GROUP"), TYPE = c
# DT
DT <- data.table(GROUP = c("A_GROUP","B_GROUP","B_GROUP","B_GROUP","A_GROUP",
"A_GROUP","B_GROUP","B_GROUP","B_GROUP","A_GROUP"),
TYPE = c("A","B","C","D","E",
"B","B","A","A","E"),
AMOUNT =c(123,1424,1244,2111,44559,
128,1221,12144,11,439))
我怎样才能做到这一点呢?无论是什么,它都不是一个脚本,而是简单、快速、清晰,让它变得完美。谢谢你,温佩尔
library( data.table)
# sample data
DT <- data.table(GROUP = c("A_GROUP","B_GROUP","B_GROUP","B_GROUP","A_GROUP",
"A_GROUP","B_GROUP","B_GROUP","B_GROUP","A_GROUP"),
TYPE = c("A","B","C","D","E",
"B","B","A","A","E"),
AMOUNT =c(123,1424,1244,2111,44559,
128,1221,12144,11,439))
#create a dt for the sum by TYPE
dt1 <- DT[, list( ALL_SUM = sum( AMOUNT ) ), by = "TYPE" ]
#create a dt for the sum by TYPE and GROUP
dt2 <- DT[, list( sum = sum( AMOUNT ) ), by = c( "TYPE", "GROUP" )]
#rename the groups to the desired column names
dt2[, GROUP := paste0( GROUP, "_SUM" )]
#cast to wide format
dt2 <- dcast( dt2, TYPE ~ GROUP, value.var = "sum", fill = 0 )
# option 1: join together (you can use setcolorder() afterwards to get the desired order of columns)
dt2[dt1, on = "TYPE"]
#option 2: bind together (drop the first colum of dt2, oly works of both dt's have the same number of rows)
cbind( dt1, dt2[, -1] )
# TYPE ALL_SUM A_GROUP_SUM B_GROUP_SUM
# 1 A 12278 123 12155
# 2 B 2773 128 2645
# 3 C 1244 0 1244
# 4 D 2111 0 2111
# 5 E 44998 44998 0
# TARGET
TYPE ALL SUM A_GROUP_SUM B_GROUP_SUM
A 12,278 123 12,155
B 2,773 128 2,645
C 1,244 0 1,244
D 2,111 0 2,111
E 44,998 44998 0
library( data.table)
# sample data
DT <- data.table(GROUP = c("A_GROUP","B_GROUP","B_GROUP","B_GROUP","A_GROUP",
"A_GROUP","B_GROUP","B_GROUP","B_GROUP","A_GROUP"),
TYPE = c("A","B","C","D","E",
"B","B","A","A","E"),
AMOUNT =c(123,1424,1244,2111,44559,
128,1221,12144,11,439))
#create a dt for the sum by TYPE
dt1 <- DT[, list( ALL_SUM = sum( AMOUNT ) ), by = "TYPE" ]
#create a dt for the sum by TYPE and GROUP
dt2 <- DT[, list( sum = sum( AMOUNT ) ), by = c( "TYPE", "GROUP" )]
#rename the groups to the desired column names
dt2[, GROUP := paste0( GROUP, "_SUM" )]
#cast to wide format
dt2 <- dcast( dt2, TYPE ~ GROUP, value.var = "sum", fill = 0 )
# option 1: join together (you can use setcolorder() afterwards to get the desired order of columns)
dt2[dt1, on = "TYPE"]
#option 2: bind together (drop the first colum of dt2, oly works of both dt's have the same number of rows)
cbind( dt1, dt2[, -1] )
# TYPE ALL_SUM A_GROUP_SUM B_GROUP_SUM
# 1 A 12278 123 12155
# 2 B 2773 128 2645
# 3 C 1244 0 1244
# 4 D 2111 0 2111
# 5 E 44998 44998 0