按1个连续和多个逻辑值分组

时间:2018-12-28 18:59:14

标签: r group-by dplyr

我的数据如下:

eg_data <- data.frame(
id = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4),
date = c("11/1", "11/1", "11/2", "11/1", "11/5", "11/5", "11/4", "11/5", "11/4", "11/2", "11/4", "11/3", "11/3", "11/2", "11/3", "11/2", "11/1", "11/1", "11/2", "11/3"),
sales = c(2,3,2,3,4,5,4,5,6,2,3,4,7,6,5,4,6,4,3,5),
dupes = c(F,T,F,T,F,F,F,T,T,F,F,F,T,F,T,F,F,T,T,F),
dupes2 = c(F,F,F,T,F,F,F,T,F,F,F,F,F,F,F,F,F,F,F,F))

重复是按日期重复,重复2是按日期和销售额重复

我需要标记dupes = TRUE和dupes2 = FALSE的所有实例。我需要在ID级别完成此操作,即对于ID = 1,此条件存在一次,因此ID = 1的每一行都会被标记为结果。

我尝试过类似的操作:

eg_data <- eg_data %>% group_by(id, dupes=TRUE, dupes2=FALSE) %>% mutate(flag=1)

这显然行不通,但这就是想法。对于所有具有dupe = T和dupe2 = F的行的ID,请将该ID的所有迭代标记为1。

最终结果将是上面的数据,其中一列名为flag = 1,每个id 1-4为b / c,至少有一行dupes = T和dupes2 =F。我需要添加一个列,而不是将其过滤到要打印的列表,而不创建单独的数据集。

我看过

dplyr group_by logical values

Grouping functions (tapply, by, aggregate) and the *apply family

但是对我来说都没有。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

根据操作,使用any

写入答案
eg_data = eg_data %>% group_by(id) %>% mutate(flag=any(dupes&!dupes2))