确定分组数据框中的较低和较高值

赫里斯托(Hristo Hristov)

我有这种格式的数据框:

 pair_id group_id value
 <int>    <int>   <dbl>
    1        1    0.600
    1        2    0.400
    2        3    0.500
    2        4    0.500
    3        5    0.200
    3        6    0.800
    4        7    0.300
    4        8    0.700
    5        9    0.500
    5       10    0.500

它是使用以下代码段生成的:

library(tidyverse)

df <- tibble(pair_id = rep(1:5, each = 2),
             group_id = seq(1:10),
             value = c(0.6, 0.4, 0.5, 0.5, 0.2, 0.8, 0.3, 0.7, 0.5, 0.5))

我的目标是确定每个pair_id中的哪个group_id具有较高的值,而哪个具有较低的值。确定后,我想将“较高”分配给具有较高值的​​group_id,将“较低”分配给具有较低值的group_id。

但是,需要注意的是,如果两个组具有相等的值(例如,两个组的值均为0.5,如示例中的对2和对5中所示),则应随机确定“较高”或“较低”的分配。

目标是产生一个带有新列的数据框,让我们说group_rank,它看起来应该像这样:

pair_id group_id value group_rank
 <int>    <int> <dbl>  <chr>     
  1        1    0.600  higher    
  1        2    0.400  lower     
  2        3    0.500  higher    
  2        4    0.500  lower     
  3        6    0.800  higher    
  3        5    0.200  lower     
  4        8    0.700  higher    
  4        7    0.300  lower     
  5        9    0.500  lower     
  5       10    0.500  higher 

在tidyverse框架中是否有一种简单的方法来实现这一目标?

阿克伦

按“ pair_id”分组后,在“值”列上使用which.minwhich.max获取用于子集相应“ group_id”的行索引

df %>% 
  group_by(pair_id) %>% 
  summarise(groupMin = group_id[which.min(value)], groupMax = group_id[which.max(value)])

注意:如果“ pair_id”有多个minmax值,则“which.min或”which.max仅获得第一个索引


如果有多个minmax值,则使用==和并sample获取random'group_id'

df %>%
   group_by(pair_id) %>%
   summarise(groupMin = sample(group_id[value == min(value)], 1),
             groupMax = sample(group_id[value == max(value)], 1) )

更新资料

根据OP的注释,我们将arrange'pair_id'和'value'降序排列,并按'pair_id'分组,如果'value'中不同元素的数量等于1,则分别指定“ higher”,“ lower”通过按“较高”顺序,然后按“较低”顺序分配sampleelse分配

df %>% 
   arrange(pair_id, desc(value)) %>% 
   group_by(pair_id) %>% 
   mutate(group_rank = case_when(n_distinct(value) == 1  ~ sample(c("higher", "lower")),
          TRUE ~ c("higher", "lower")))
# A tibble: 10 x 4
# Groups: pair_id [5]
#   pair_id group_id value group_rank
#     <int>    <int> <dbl> <chr>     
# 1       1        1 0.600 higher    
# 2       1        2 0.400 lower     
# 3       2        3 0.500 higher    
# 4       2        4 0.500 lower     
# 5       3        6 0.800 higher    
# 6       3        5 0.200 lower     
# 7       4        8 0.700 higher    
# 8       4        7 0.300 lower     
# 9       5        9 0.500 lower     
#10       5       10 0.500 higher    

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

显示 SQL 中较低和较高值的数量

根据分组数据框中的先前值确定结果

R:如何将较低维度的数据框与较高维度的数据框相乘

在分组数据框中输入缺失值

将数据框中的列值分组

确定值是否存在于 R 中的分组数据框中的逻辑测试(整洁的解决方案)

搜索条件位于两行值之间:识别较低和较高的值

Laravel 7:在集合中查找重复项并保留较低的值并删除其他较高的值

为数据框列中的每个值查找前一个较低的值

如何对数据框中的唯一值进行分类和分组?

对 Pandas 中较低频率箱中的较高频率数据进行计算

在数据框中为每个组取下一个较低的值

确定分组数据框中值的变化

熊猫数据框。按值和计数分组

PySpark数据框分组和计数空值

R 中的数据框按列中的重复值分组

除非满足某些条件,否则选择表中两个值中较低的值,然后选择较高的值

从 Pandas 数据框中,根据其他列的分组和最大值返回特定列值

确定何时在熊猫数据框中更改列值

拆分和分组数据框

熊猫,分组数据框并标准化每组中的值

在分组的 Pandas 数据框中获取最多出现的值

在数据框中按多列分组的值排序

根据文件来源将数据框中的值分组

Pyspark如何从数据框中对基于行的值进行分组

Pandas:如何合并分组数据框中的值计数

在已经分组的数据框中对每组的值进行排序

熊猫中数据框的多列分组和求和

在熊猫数据框中按月和年分组