Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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 基于组和组内ID匹配的行选择_R_Dplyr_Group By_Tidyverse - Fatal编程技术网

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

R 基于组和组内ID匹配的行选择,r,dplyr,group-by,tidyverse,R,Dplyr,Group By,Tidyverse,我正在尝试根据另一个组中的值选择行。这是虚拟数据帧 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,

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

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))
但我试图做的是从另一个类别中的同一标签中捕获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将数据连接回原始数据:


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


我们可以不用加入

library(dplyr)
das %>%
   group_by(category, label) %>% 
   mutate(flag = weigh == max(weigh)) %>%
   group_by(id) %>%
   filter(any(flag)) %>%
   select(-flag)
# A tibble: 8 x 4
# Groups:   id [4]
#  weigh    id label category
#  <dbl> <dbl> <chr>    <dbl>
#1    15   125 A            1
#2    50   128 A            1
#3    34  1226 B            1
#4    60  1225 B            1
#5    66   125 A            3
#6    20   128 A            3
#7     8  1225 B            3
#8    56  1226 B            3

我们可以不用加入

library(dplyr)
das %>%
   group_by(category, label) %>% 
   mutate(flag = weigh == max(weigh)) %>%
   group_by(id) %>%
   filter(any(flag)) %>%
   select(-flag)
# A tibble: 8 x 4
# Groups:   id [4]
#  weigh    id label category
#  <dbl> <dbl> <chr>    <dbl>
#1    15   125 A            1
#2    50   128 A            1
#3    34  1226 B            1
#4    60  1225 B            1
#5    66   125 A            3
#6    20   128 A            3
#7     8  1225 B            3
#8    56  1226 B            3
library(dplyr)
das %>%
   group_by(category, label) %>% 
   mutate(flag = weigh == max(weigh)) %>%
   group_by(id) %>%
   filter(any(flag)) %>%
   select(-flag)
# A tibble: 8 x 4
# Groups:   id [4]
#  weigh    id label category
#  <dbl> <dbl> <chr>    <dbl>
#1    15   125 A            1
#2    50   128 A            1
#3    34  1226 B            1
#4    60  1225 B            1
#5    66   125 A            3
#6    20   128 A            3
#7     8  1225 B            3
#8    56  1226 B            3