子组上的新列以及另一列中的百分比范围

拉胡尔·阿加瓦尔

我有一个示例df,如下所示:

df_test<- data.frame("Group.Name"=c("Group1","Group2","Group1","Group2","Group2","Group2","Group1"),
                "Sub_group_name"=c("A","A","B","C","D","E","C"),
                "Total%"=c(35,26,10,9,5,11,13))

原始df很大,需要记住此df:

  • 只有两个组“ Group1”和“ Group2”
  • 一个组下有多个sub_group,上面的df显示了一些子组
  • 组+子组的总百分比总计为100%。在上面并不是因为它只是一个示例。因此,对于Group1所有子组(例如A, B, Cetc),“ Group2 ”的总和为100 1组2的将大致相同

问:

我需要创建一个名为的列Category该列可以Total%在一个Group.Name级别的范围内工作创建新列的条件是:

  • 对于每个最高的Group.Name地方Total%,类别列就是Sub_group_name名称。

  • 对于每一个Group.NameTotal%10-30之间,类别栏是“ New_Group1 ”。

  • 对于每一个Group.NameTotal%小于10,类别栏是“ New_Group2 ”。

预期产量:

df_output<- data.frame("Group.Name"=c("Group1","Group2","Group1","Group2","Group2","Group2","Group1"),
                     "Sub_group_name"=c("A","A","B","C","D","E","C"),
                     "Total%"=c(35,26,10,9,5,11,13),
                     "category"=c("A","A","New_Group1","New_Group1","New_Group2","New_Group1","New_Group1"))
阿克伦

我们可以使用cut来创建labels带有的breaks,然后替换“总计”。在每个“ Group.Name”中最高,对应的是“ Sub_group_name”

library(dplyr)
df_test %>% 
  group_by(Group.Name) %>%
  mutate(category = as.character(cut(`Total%`, breaks = c(-Inf,10, 30, Inf), 
          labels = c("New_Group2", "New_Group1", "Other"), right = FALSE)), 
         category = case_when(`Total%` == max(`Total%`) ~ 
                          Sub_group_name,
                                   TRUE ~ category))
# A tibble: 7 x 4
# Groups:   Group.Name [2]
#  Group.Name Sub_group_name `Total%` category  
#  <chr>      <chr>             <dbl> <chr>     
#1 Group1     A                    35 A         
#2 Group2     A                    26 A         
#3 Group1     B                    10 New_Group1
#4 Group2     C                     9 New_Group2
#5 Group2     D                     5 New_Group2
#6 Group2     E                    11 New_Group1
#7 Group1     C                    13 New_Group1

数据

df_test<- data.frame("Group.Name"=c("Group1","Group2","Group1","Group2","Group2",
        "Group2","Group1"),
             "Sub_group_name"=c("A","A","B","C","D","E","C"),
          "Total%"=c(35,26,10,9,5,11,13), stringsAsFactors = FALSE, 
              check.names = FALSE)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pandas:每一列的nan的百分比

SQL中同一列的百分比

使用data.table根据另一列中的类别来计算发生百分比

如何使用大熊猫中的groupby根据另一列中的条件计算百分比总数

在数据透视表中设置一列作为另一列的百分比

在Python中按阈值计算和计算每一列的百分比

获取基于另一列但类别不同的列的百分比

使用dplyr计算一列中按组计算的百分比,而忽略空白

计算SQL查询中两列之间的百分比作为另一列

找出一列中的序列与另一列中相同的次数的百分比

在Power BI中显示为另一列的百分比

Python按一列分组并计算另一列的百分比

熊猫百分比变化基于日期时间标识的上一列值

熊猫:如何计算一列相对于另一列的百分比?

计算组中在另一列中具有特定值的行的百分比

如何创建循环和/或函数以将200列(并创建200个新列/变量)除以另一列以获得百分比?

如何返回2列之间的百分比,该百分比由SQL中的另一列分组?

选择PostgreSQL中另一列的百分比

根据另一列上的条件计算价格变化和价格的累计百分比变化

一列以上的groupby的熊猫百分比

如何计算每一列的百分比?

熊猫分组-基于另一列的值占分组总数的百分比

基于另一列的列中的Python百分比计算

一列总和 SQL 百分比

计算按另一列分组的多对列之间的变化百分比

根据另一列计算 groupby 中的百分比

计算 SQL Query 中两列之间的百分比作为每天的另一列

SQL 查找一列总数的百分比

根据另一列值计算数据框列中某个值出现的百分比