我的数据如下:
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。我需要添加一个列,而不是将其过滤到要打印的列表,而不创建单独的数据集。
我看过
和
Grouping functions (tapply, by, aggregate) and the *apply family
但是对我来说都没有。
感谢您的帮助。
答案 0 :(得分:1)
根据操作,使用any
eg_data = eg_data %>% group_by(id) %>% mutate(flag=any(dupes&!dupes2))