如果ID包含了向量中的所有元素,则在dplyr中对该ID返回TRUE。

问题描述 投票:0回答:1

我想让所有包含三个时间(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%函数来解决这个问题 但我做不到。

r dplyr
1个回答
2
投票

在这里,我们需要 filterall. 创建一个逻辑向量 %in% 并包上 all 按'id'分组后,得到一个单一的TRUEFALSE输出。

library(dplyr)
df1 %>%
    group_by(id) %>% 
    filter(all(4:6 %in% time))

注:上级创建了一个 matrixcbind. 为了创建一个 data.frame,使用 data.frame 构造函数。 另外,逻辑向量 TRUE/FALSE ('解决方案')应不带任何引号,即: TRUEFALSE 而不是 "TRUE""FALSE"

资料

df1 <- data.frame(id, time)
© www.soinside.com 2019 - 2024. All rights reserved.