我正在尝试根据另一个组的值选择行。这是虚拟数据框
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] 删除。
我来说两句