基于组和组内 ID 匹配的行选择

格格

我正在尝试根据另一个组的值选择行。这是虚拟数据框

das <- data.frame(weigh=c(10,30,15,11,14,50,30,32,34,60,17,31,2,6,66,5,4,20,21,12,8,56,6,19),
                  id =c(123,124,125,126,127,128,1223,1224,1226,1225,1227,1228,123,124,125,126,127,128,1223,1224,1225,1226,1227,1228),
                  label=c("A","A","A","A","A","A","B","B","B","B","B","B"),
                  category=c(1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3))

我按类别和标签进行分组,然后选择权重最大的行。我喜欢这个。

das %>% group_by(category,label) %>% slice(which.max(weigh))

但我想要做的是从其他类别中的同一标签中捕获具有 id 值的行。所以这个虚拟示例中的预期输出是这样的

weigh   id label category
50  128     A        1
15  125     A        1
60 1225     B        1
34 1226     B        1
66  125     A        3
20  128     A        3
56 1226     B        3
8 1225     B        3
罗纳克·沙阿

一种方法是通过以下方式将数据连接回原始数据id

library(dplyr)

das %>% 
  group_by(category,label) %>% 
  slice(which.max(weigh)) %>%
  left_join(das, by = 'id') %>%
  select(weigh = weigh.y, id, category = category.y, label = label.y) %>%
  arrange(category, label)

#  weigh    id category label
#  <dbl> <dbl>    <dbl> <chr>
#1    50   128        1 A    
#2    15   125        1 A    
#3    60  1225        1 B    
#4    34  1226        1 B    
#5    20   128        3 A    
#6    66   125        3 A    
#7     8  1225        3 B    
#8    56  1226        3 B   

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章