Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按透视表分组,并在同一表数据中细分。表R_R_Data.table_Pivot - Fatal编程技术网

如何按透视表分组,并在同一表数据中细分。表R

如何按透视表分组,并在同一表数据中细分。表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

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("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