我试图获取所有包含至少五个元素c(2,3,4,5,6)中的三个的id,以便对该id的每一行返回TRUE,而对其他id返回false。
id <- c(1,1,2,2,3,3,3,3)
time <- c(4,6,4,5,4,5,6,7)
df1 <- data.frame(id,time)
解
solution <-c(FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE)
df_w_sol <- data.frame(df1,solution)
我正在尝试以下组合:
df1 %>%
group_by(id) %>%
mutate(INCLUDE = any(2:6 %in% time))
但是斗争是“至少5个中的3个”部分,我认为应该包括n>部分。
您可以sum
用来计算匹配的值的数量:
library(dplyr)
df1 %>% group_by(id) %>% mutate(solution = sum(2:6 %in% time) >= 3)
# id time solution
# <dbl> <dbl> <lgl>
#1 1 4 FALSE
#2 1 6 FALSE
#3 2 4 FALSE
#4 2 5 FALSE
#5 3 4 TRUE
#6 3 5 TRUE
#7 3 6 TRUE
#8 3 7 TRUE
等效基数R
transform(df1, solution = ave(time, id, FUN = function(x) sum(2:6 %in% x)) >= 3)
和 data.table
library(data.table)
setDT(df1)[, solution := sum(2:6 %in% time) >= 3, id]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句