R中数据帧中的条件子集



我在R中有一个数据帧,看起来像这样:

Id   group   category number
001  1       A        0.10
001  1       B        0.15
002  2       A        0.55
003  3       A        0.75
003  3       B        0.45

现在,我希望每个Id只有一行。对于groups1和2中的Id,应主要使用category为B的行。如果对于groups,1或2没有category为B的行,则应使用categoryA。对于group为3的Id's,应始终使用category为A的行。

输出应该像这个

Id   group   category number
001  1       B        0.15
002  2       A        0.55
003  3       A        0.75

在R中如何做到这一点?

我们可以使用slice

library(dplyr)
df1 %>% 
group_by(Id) %>%
slice(max(match('B', category, nomatch = 0), 1))

数据

df1 <- structure(list(Id = c("001", "001", "002", "003", "003"), group = c(1L, 
1L, 2L, 3L, 3L), category = c("A", "B", "A", "A", "B"), number = c(0.1, 
0.15, 0.55, 0.75, 0.45)), row.names = c(NA, -5L), class = "data.frame")

由于B位于A之后,我们将按类别降序排序,每组保留一行,根据您的建议筛选出第3/category A组的行。

library(dplyr) 
your_data %>%
filter(!(group == 3 & category == "A")) %>%
group_by(Id, group) %>%
arrange(desc(category)) %>%
slice(1)

最新更新