我想让所有包含三个时间(4,5,6)的id对该id的每一行都返回TRUE。
id <- c(1,1,1,1,2,2,2,2,3,3,3,3)
time <- c(3,4,6,7,2,3,4,6,4,5,6,7)
df1 <- data.frame(id,time)
solution <- c(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE)
df_w_sol <- data.frame(df1,solution)
我想代码会类似于。
df1 %>%
group_by(id)%>%
mutate(if_else(time==c(4,5,6),TRUE, FALSE))
我一直想用ifelse和%in%函数来解决这个问题 但我做不到。
在这里,我们需要 filter
与 all
. 创建一个逻辑向量 %in%
并包上 all
按'id'分组后,得到一个单一的TRUEFALSE输出。
library(dplyr)
df1 %>%
group_by(id) %>%
filter(all(4:6 %in% time))
注:上级创建了一个 matrix
与 cbind
. 为了创建一个 data.frame
,使用 data.frame
构造函数。 另外,逻辑向量 TRUE/FALSE
('解决方案')应不带任何引号,即: TRUE
或 FALSE
而不是 "TRUE"
或 "FALSE"
df1 <- data.frame(id, time)