我有一个这样的桌子
data.table
代码列中的第一个行字母分为以下几类:
Code
A123
B3123
C93485
D345
E29845
我想这样显示输出表
Char Category
A-B A
C B
D-E C
我不确定如何开始。任何提示或帮助都将不胜感激
答案 0 :(得分:1)
这里是一种选择:
Building R package: lwgeom (0.2-4)
/mnt/packages/build /mnt
* installing to library ‘/opt/R/4.0.0/lib/R/library’
* installing *source* package ‘lwgeom’ ...
** package ‘lwgeom’ successfully unpacked and MD5 sums checked
** using staged installation
configure: CC: gcc
configure: CXX: g++ -std=gnu++11
configure: pkg-config proj exists, will use it
configure: PROJ: 4.9.2
checking for pj_init_plus in -lproj... yes
checking PROJ: epsg found and readable... yes
configure: POSTGIS_PROJ_VERSION: 49
checking for geos-config... /usr/bin/geos-config
checking geos-config usability... yes
configure: GEOS: 3.5.1
checking GEOS version >= 3.6.0... no
configure: error: upgrade GEOS to 3.6.0 or later
ERROR: configuration failed for package ‘lwgeom’
* removing ‘/opt/R/4.0.0/lib/R/library/lwgeom’
################################# End Task Log #################################
Error: Unhandled Exception: Child Task 741115836 failed: Error building image: Error building lwgeom (0.2-4). Build exited with non-zero status: 1
Execution halted
此方法在每个代码的第一个字母上使用SELECT
CASE WHEN SUBSTR(Code, 1, 1) IN ('A', 'B') THEN 'A'
WHEN SUBSTR(Code, 1, 1) = 'C' THEN 'B'
ELSE 'C' END AS Category,
COUNT(*) AS Total,
200.0 * COUNT(*) / SUM(COUNT(*)) OVER () AS Percentage
FROM yourTable
GROUP BY
ROLLUP(CASE WHEN SUBSTR(Code, 1, 1) IN ('A', 'B') THEN 'A'
WHEN SUBSTR(Code, 1, 1) = 'C' THEN 'B'
ELSE 'C' END);
表达式来分配类别。然后,我们按类别进行汇总,并找到总计以及百分比。请注意,CASE
用于在结果集的底部生成总记录。这样做的副作用是,我们将其乘以200%,因为摘要行已经包含了整个表的计数,然后对它进行了两次计数。